Introduzione a CouchDB

couchDBCouchDB e’ un database documentale NoSQL disponibile con l’ampia licenza Apache.
Apache CouchDB e’ un moderno documentale richiamabile semplicemente con l’HTTP e che al tempo stesso offre le piu’ avanzate funzionalita’ di replicazione dati e di ricerca in parallelo (Map/Reduce).

CouchDB (acronimo di Cluster Of Unreliable Commodity Hardware) e’ uno dei piu’ diffusi DB documentali Web grazie alla sua velocita’, alla flessibilita, alla semplicita’ di utilizzo ed al… prezzo!

Installazione

Installare CouchDB e cURL (che serve per accedere) e’ facile su Linux (eg. RedHat, Fedora, CentOS, Scientific Linux, …):

yum install couchdb curl -y
oppure
sudo aptitude install couchdb curl
Ora bisogna far partire il server CouchDB con il comando couchdb. Per verificare se funziona tutto basta un comando:
# curl http://127.0.0.1:5984
{“couchdb”:”Welcome”,”uuid”:”fd91d8b7b77c7f6d75d5937326a95ad2″,”version”:”1.5.0″,”vendor”:{“version”:”14.04″,”name”:”Ubuntu”}}

CouchDB e’ disponibile per tutti i sistemi UNIX-based ed anche sulle piattaforme MS-Windows e Mac OS X. Installare le versioni precedenti di CouchDB non era cosi’ semplice: bisognava partire dall’installazione del linguaggio di programmazione Erlang e ricompilare…

Utilizzo

CouchDB e’ accessibile esclusivamente attraverso un HTTP-based RESTful API, cio’ significa che, anziche’ collegarsi al DB server utilizzando un’applicazione client per interagire con il sistema, basta utilizzare un software in grado di interagire con un HTTP server web per fare richieste. CouchDB che a sua volta eseguira’ le azioni nel database, restituendo una risposta appropriata quando finito.
Quindi e’ possibile gestire il database semplicemente visitando gli URL nel browser web oppure utilizzando gli strumenti da riga di comando come curl o, cosa piu’ importante, attraverso qualsiasi linguaggio di programmazione che supporta richieste HTTP.
L’implementazione dell’interfaccia REST (Representational Transfer State) su CouchDB e’ molto completa poiche’ non si limita al CRUD (CREATE, READ, UPDATE, DELETE) ma ogni operazione svolta su CouchDB e’ richiamabile con l’HTTP.

Futon

CouchDB possiede una sua interfaccia web molto user friendly, Futon, dalla quale e’ possibile eseguire qualsiasi operazione per la gestione di un database, come l’inserimento, la visualizzazione, la modifica e la cancellazione dei dati. Inoltre Futon contiene anche le principali funzionalita’ di amministrazione di un database, come le impostazioni di configurazione, la replicazione dei dati, definizione dei ruoli e privilegi e uno strumento di testing.
Per accedere all’interfaccia web basta collegarsi da browser a localhost:5984/_utils

cURL

Per i piu’ affezionati alla linea di comando (come me per esempio), si puo’ usare curl, un ottimo tool utile per trasferire dati da/a un server utilizzando vari protocolli, tra cui HTTP, HTTPS, FTP. Il modo per farlo e’ digitando:

curl <opzioni> <ip_host>:5984/<database>/<record>.

Da notare che nel URL viene specificata la porta 5984, e’ quella usata dal processo di couchdb.
Tra le opzioni piu’ importanti: -X per specificare il tipo di richiesta http: GET per richiedere dati, PUT e POST per modificare dati o DELETE per cancellare. Inoltre -d permette di specificare i dati da includere nella richiesta, ad esempio per modificare documenti nel database.
Esempi:

# Crea il database "libri"
curl -X PUT http://127.0.0.1:5984/libri

# Visualizza il contenuto di "libri" (all'inizio e' vuoto)
curl -X GET http://127.0.0.1:5984/libri

# Crea il documento con _id "lafineeilmioinizio" dentro il database "libri"
curl -X PUT http://127.0.0.1:5984/libri/lafineeilmioinizio \
 -d '{"titolo":"La fine e il mio inizio", "autore":"Tiziano Terzani", 
      "casa_editrice":"Longanesi", "prezzo":"18.60"}'

# NB: Tutte le volte che un documento viene modificato riceve un revision number
# Modifica un documento aggiungendo come allegato un'immagine
curl -X PUT http://127.0.0.1:5984/libri/lafineeilmioinizio/cover.jpg?rev=1-XXX \
 --data-binary @images/budda.jpg -H "Content-Type: image/jpg"

# Crea un documento hungergames copiando il contenuto da un altro documento
curl -X COPY http://127.0.0.1:5984/libri/lafineeilmioinizio -H "Destination: hungergames"

# Cancella il documento con _id "hungergames"
curl -X DELETE http://127.0.0.1:5984/libri/hungergames?rev=1-YYY 

# Effettua un caricamento massivo di documenti da file
curl -X POST http://127.0.0.1:5984/libri/_bulk_docs -H "Content-type: application/json" -d @biblio.json

# Visualizza tutto il contenuto del database "libri" e il dettaglio dei documenti presenti
curl -X GET http://127.0.0.1:5984/libri/_all_docs?include_docs=true

Architettura

CouchDB e’ un database document-oriented. Cio’ significa che a differenza dei piu’ tradizionali DBMS (Database Management System) relazionali come Oracle e PostgreSQL, i dati non vengono memorizzati in tabelle (o se volete, relazioni), ma in “documenti”.

Su un database relazionale le tabelle hanno una struttura rigida, sono composte da campi definiti prima della effettiva memorizzazione dei dati. Le tabelle vanno dichiarate con gli opportuni statement DDL, prima di essere utilizzate. Ogni tabella e’ composta da tuple (ovvero le righe della tabella o i record) che contengono i dati. La gestione dei dati si effettua con statement DML. I comandi DDL e DML della stragrande maggioranza dei DB relazionali sono in SQL. Ora dimentichiamoci tutto questo…

In CouchDB il concetto di relazione o di tabella non esiste, l’elemento fondamentale e’ il documento che contiene al suo interno tutti i dati relativi, organizzati in modo eterogeneo. Si possono aggiungere e modificare i campi anche dopo l’effettivo inserimento dei dati. In questo modo record appartenenti alla stessa categoria di informazioni possono avere campi diversi tra di loro. La chiave primaria dei database relazionali viene tradotta nel campo univoco _id di CouchDB, creato automaticamente dall’engine del DBMS (ma che e’ anche possibile indicare in modo esplicito.

Dal punto di vista del sistema operativo CouchDB si presenta come un unico processo beam.smp in ascolto sulla porta TCP 5984 (6984 se e’ abilitato l’HTTPS). In realta’ all’interno del processo operano diversi thread con compiti specifici.
I file utilizzati da CouchDB su Linux si trovano in /etc/couchdb, i file di database su /var/lib/couchdb, i log su /var/log/couchdb.

Consistenza dei dati e replicazione

CouchDB non utilizza alcun meccanismo di locking ma sfrutta l’MVCC (Multiversion Concurrency Control), ogni modifica di un oggetto ne crea una nuova versione. Le versioni precedenti non vengono cancellate. Se due modifiche vanno in conflitto poiche’ accedono allo stesso documento, la seconda riceve un errore in save. L’applicazione deve riprendere l’ultima versione del documento e rieseguire l’UPDATE.
L’isolamento e’ mantenuto solo a livello di un singolo documento, questa e’ una notevole semplificazione, rispetto alla complessa logica transazionale di altri database, ma consente l’ottimizzazione, la parallelizzazione e la distribuzione dei dati in modo semplice. A livello di accesso al file di dati ogni singola modifica ad un documento rispetta le proprieta ACID (Atomic Consistent Isolated Durable) con la serializzazione delle modifiche sui documenti e la scrittura sincrona sul disco.

Piu’ database CouchDB possono essere collegati tra loro in modo molto semplice. I database vengono aggiornati tra loro con una replicazione peer-to-peer incrementale implementata nativamente nell’engine. CouchDB permette una replicazione bidirezionale asincrona, utilizza un meccanismo automatico di risoluzione dei conflitti e fornisce una eventual consistency tra i database. Se i database sono ospitati su nodi differenti si ottiene con questo la distribuzione dei dati.
La replicazione di CouchDB puo’ essere utilizzata sia per sincronizzare database locali che per complesse configurazioni con sharding dei dati.

 

Cloud Si o Cloud No ?

Opera-browserE se foste voi i gestori del vostro Cloud ?

Una volta i fedeli sudditi Inglesi recitavo un sentito “God save the Queen“, oggi nell’era del cloud computing tutti noi abbiamo i nostri dati conservati su server locati chissà dove nel mondo, le nostre piattaforme di comunicazione sono proprieta’ di aziende mega-multinazionali che ci assicureranno i loro servizi fino a quando ne trarranno profitto, e cosi’ molti di noi hanno sostituito lo status update di Facebook al vecchio diario/agenda, e il nostro account GMail contiene informazioni fondamentali alla nostra vita. Tutto questo spaventa se si pensa che in conclusione, non abbiamo nessun controllo fisico sui nostri dati.

Dare una soluzione alternativa e’ il fulcro del progetto Opera Unite sviluppato dall’omonima azienda Norvegese che nel lontano 1994 creo’ il browser Opera che ad oggi e’ tra i migliori 4 al mondo.  OP (opera unite) non e’ un nuovo browser ma un plugin a Opera browser che trasforma il vostro terminale in un WebServer, ma andiamo nel dettaglio.

Scaricando la versione per PC/Mac/Linux di Opera Unite (questo e’ il link) sarete in grado di usufruire di una piattaforma di condivisione che non si basa più sul cloud computing, ma che rende la vostra macchina un server user friendly. Attraverso Opera Unite infatti sarete in grado di creare chat room, condividere file, musica, foto, avere un Wall sul quale, secondo i permessi da voi impostati, gli altri utenti saranno in grado di lasciare delle note.

La cosa interessante di questo Browser è che non prevede la necessità per gli altri utenti di utilizzare lo stesso software per interagire con i servizi da voi offerti, ma genera delle URL liberamente diffondibili a chiunque disponga di una connessione internet. Inoltre ha un approccio Widget Based, con la possibilità di utilizzare delle API che permetteranno alla community di sviluppare ogni tipo di gadget dovesse mancare dalla casa madre.

 In soldoni, Opera Unite permette le seguenti funzioni :

  • File Sharing:
    «Condivisione sicura di file dal tuo personal computer senza aspettare alcun upload. Scegli la cartella da cui vuoi condividere i file e Opera Unite generera’ un url diretto a tale cartella. Girando il link ai tuoi amici, potrai condividerli senza passare per un servizio di terze parti»;
  • Web Server:
    «Fai girare un intero sito web dal tuo computer locale con Opera Unite Web Server. Dopo aver selezionato la cartella contenente il sito web, potrai condividere facilmente inoltrando ” l’Opera Unite URL “. Opera Unite troverà automaticamente il file index e creerà il sito web per come lo hai sviluppato»;
  • Media Player:
    «Opera Unite permette addirittura l’ascolto da remoto, permettendo così di accedere ai propri file anche al di fuori della portata della macchina ospitante»;
  • Photo Sharing:
    «Condividi le tue foto direttamente dal tuo pc, senza caricarle online. Una volta selezionata la cartella, il servizio creera’ una galleria di thumbnail delle tue foto. Cliccando sulle thumbnail si vedrà la foto nella sua risoluzione originale»;
  • The Lounge:
    «The Lounge è un servizio di chat interno che gira sul tuo computer. I tuoi amici/colleghi potranno accedere alla chat room tramite link diretto, senza che venga richiesta alcuna iscrizione al servizio. A seconda delle tue impostazioni sulla privacy, potrà essere richiesta soltanto una password per il log in nella tua chat room»;
  • Fridge:
    Scrivi una nota sul “frigorifero” (Wall) dei tuoi amici virtuali. Condividendo il link del tuo “frigorifero”, tu e i tuoi amici, famigliari o colleghi potrete scambiarvi appunti in sicurezza e privatamente, in tempo reale».

BitNami: CMS impacchettati per tutti

bitnamiBitnami 

Bitnami è una libreria di applicazioni server popolari e ambienti di sviluppo che possono essere installati con un solo click, sia in un computer portatile, in una macchina virtuale o ospitato nel cloud. Nel pacchetto che sceglierete d’installare, che sia un WebServer od un ambiente CMS,  trovere gia’ compilate e configurate tutte le librerie necessarie a rendere da subito utilizzabile il vostro nuovo ambiente di lavoro / test.

Bitnami LAMP Stack (ossia come allestire un Server Web con un clic)

Introduzione

In questo articolo vedremo come installare in pochi e semplici passaggi un server web (Apache), che si occupa di ricevere ed elaborare le richieste di caricamento delle pagine, e un database (MySQL o PostgreSQL), su cui verranno memorizzate le informazioni associate all’applicazione web; sono disponibili svariati pacchetti che offrono la possibilità di allestire facilmente e con pochi clic un ambiente completo, preconfigurato e perfettamente funzionante.

Le combinazioni di piattaforme più comuni vengono denominate ” xAMP “, ove la prima lettera x indica il sistema operativo utilizzato (L = Linux, M = MacOS e W = Windows i più comuni), la seconda si riferisce al server web (A = Apache), la terza al database (M = MySQL, P = PostgreSQL) e la quarta ai linguaggi usati per scrivere le pagine web (P = Perl/PHP/Python); tra i numerosi pacchetti disponibili, si segnalano per completezza e facilità d’installazione ed utilizzo XAMPP e BitNami xAMP Stack, entrambi disponibili per Linux, MacOS e Windows e con la possibilità di installarne copie multiple ed indipendenti sulla stessa macchina.

La scelta è ricaduta su BitNami LAMP Stack per tre motivi principali:

  • l’installazione non richiede privilegi amministrativi in ambiente Linux;
  • è espandibile mediante moduli (consente ad esempio di installare con un clic Drupal, WordPress, Ruby-Rails…);
  • supporta non solo MySQL ma anche PostgreSQL e ne rende possibile l’installazione contemporanea.

Installazione

Per prima cosa dovremo accedere alle pagine di download del pacchetto per Linux (qui) o Windows (qui): la scelta del database è ricaduta su MySQL semplicemente  in virtù della sua maggiore diffusione, ma raccomando caldamente di provare PostgreSQL (quando affronteremo l’accesso ai database da PHP cercherò di fornire indicazioni e istruzioni per entrambi); in ogni caso le istruzioni di installazione riportate di seguito rimangono sostanzialmente valide anche per il pacchetto denominato LAPP e basato su PostgreSQL.

Raggiungete la tabella riportata nella sezione Native della pagina indicata sopra e individuate la riga corrispondente alla versione desiderata (al momento LAMPStack 5.4.30-0): fate clic sul link in corrispondenza della colonna che riporta la versione del vostro sistema operativo (a 32 o 64 bit).

Terminato il download del file, dovrete controllare dove è stato scaricato ed eseguirlo; in ambiente Linux la procedura richiede invece qualche comando da terminale:

chmod +x Scaricati/bitnami-lampstack-5.4.30-0-linux-x64-installer.bin
./Scaricati/bitnami-lampstack-5.4.30-0-linux-x64-installer.bin

Nel mio caso (Ubuntu 14.04) il file è nella cartella Scaricati e si chiama bitnami-lampstack-5.4.30-0-linux-x64-installer.bin.

Si avvierà una procedura d’installazione guidata che richiede la cartella di destinazione , la password da utilizzare per l’utente amministratore (root su MySQL, postgres su PostgreSQL) del database e la porta logica riservata al server web; per il primo e ultimo parametro potete lasciare il valore predefinito.

Al termine della procedura verrà aperta la pagina principale del server web sul vostro browser predefinito e, nella barra degli indirizzi, potrete vedere una stringa del tipo http://127.0.0.1:8080/
127.0.0.1 rappresenta l’indirizzo del computer locale e 8080 indica la porta indicata in precedenza e su cui è in ascolto il server web. Se esplorate la cartella in cui avete scelto di installare il pacchetto, troverete svariati file e cartelle: le pagine web andranno salvate all’interno della cartella (esempio) /var/www/htdocs/   o in una qualsiasi sottocartella; ad esempio, supponiamo di aver creato una cartella ” prova “ e al suo interno il file pagina.php, per aprire quest’ultimo nel browser dovrò digitare nella barra degli indirizzi:

 

http://127.0.0.1:8080/prova/pagina.php

Trovate un esauriente elenco di tutte le applicazione “stack” che potrete installare grazie ai pacchetti forniti da Bitnami al seguente indirizzo : https://bitnami.com/stacks