Iniziare con CouchDB

NoSQL è stato uno degli argomenti più discussi negli ultimi due mesi. Questo tutorial ti introdurrà a CouchDB, un'implementazione NoSQL e ti insegnerà come iniziare con la piattaforma.


Cos'è NoSQL?

NoSQL è privo di schemi - non è necessario decidere la struttura in anticipo.

NoSQL [non solo SQL] è un movimento verso negozi di documenti che non fanno uso del modello relazionale. Il cambiamento di paradigma fondamentale sta nel modo in cui memorizzano i dati. Ad esempio, quando è necessario memorizzare i dati relativi a una fattura, in RDBMS è necessario suddividere queste informazioni in tabelle e quindi utilizzare un linguaggio lato server per trasformare questi dati in oggetti di vita reale. D'altra parte, in NoSQL, è sufficiente memorizzare la fattura. NoSQL è privo di schema, il che significa che non è necessario progettare tabelle e strutture in primo piano: è sufficiente iniziare a memorizzare nuovi valori.

Continuando l'esempio di fattura, alcune fatture potrebbero includere un numero di partita IVA, altre no. In un RDBMS, dovresti dire alla tua tabella di accettare prima un numero di partita IVA e poi che potrebbe essere nullo. In NoSQL, tuttavia, è possibile archiviare le fatture con o senza numero di partita IVA: non esiste uno schema. Tieni presente che NoSQL non è un proiettile d'argento. Se i tuoi dati sono veramente relazionali, restare con il tuo RDBMS sarebbe la scelta giusta.


Interrogazione dei database NoSQL

MapReducing ha vantaggi rispetto alle query SQL perché l'attività map / reduce può essere distribuita tra più nodi, cosa non possibile in RDBMS.

I database NoSQL utilizzano map / reduce per interrogare e indicizzare il database. In RDBMS, si esegue una query che unisce più tabelle per creare innanzitutto un pool di dati e quindi la query esegue la creazione di un gruppo di risultati, un sottoinsieme dei dati complessivi. In NoSQL, si utilizza map / reduce per creare una "vista" (simile a un set di risultati) questa vista è un sottoinsieme dei dati complessivi.

La mappa sta essenzialmente estraendo i dati e riduce l'aggregazione dei dati. Più familiarità con RDBMS, più difficile sarà la mappa di cattura / riduzione. MapRidurre i vantaggi rispetto alle query SQL perché l'attività map / reduce può essere distribuita tra più nodi, cosa non possibile in RDBMS. L'aggiunta di un nuovo record al database non sempre costituisce la riesecuzione della mappa / riduzione che viene completamente rieseguita.


Presentazione di CouchDB

Alcuni dati su CouchDB che dovresti sapere:

  • CouchDB è un database orientato ai documenti JSON scritto in Erlang.
  • È un database altamente concorrente progettato per essere facilmente replicabile, in orizzontale, su numerosi dispositivi e tollerante ai guasti.
  • Fa parte della generazione di database NoSQL.
  • È un progetto di base Apache open source.
  • Permette alle applicazioni di memorizzare documenti JSON tramite la sua interfaccia RESTful.
  • Usa la mappa / riduci per indicizzare e interrogare il database.

Principali vantaggi di CouchDB

  • Documenti JSON - Tutto ciò che è memorizzato in CouchDB si riduce a un documento JSON.
  • Interfaccia RESTful - Dalla creazione alla replica fino all'inserimento dei dati, ogni attività di gestione e dati in CouchDB può essere eseguita tramite HTTP.
  • Replica N-Master - Puoi utilizzare una quantità illimitata di "master", creando alcune topologie di replica molto interessanti.
  • Costruito per offline - CouchDB può replicare su dispositivi (come i telefoni Android) che possono andare offline e gestire i dati sincronizzati per te quando il dispositivo è di nuovo online.
  • Filtri di replica - È possibile filtrare con precisione i dati che si desidera replicare su diversi nodi.

Mettere tutto insieme

CouchDB è un database progettato per funzionare su Internet di oggi.

CouchDB consente di scrivere un'applicazione lato client che comunica direttamente con il divano senza la necessità di uno strato intermedio lato server, riducendo significativamente i tempi di sviluppo. Con CouchDB, puoi gestire facilmente la domanda aggiungendo più nodi di replica con facilità. CouchDB ti permette di replicare il database sul tuo client e con i filtri puoi persino replicare i dati di quell'utente specifico.

Avere il database memorizzato localmente significa che l'applicazione lato client può essere eseguita quasi senza latenza. CouchDB gestirà la replica sul cloud per te. I tuoi utenti possono accedere alle loro fatture sul proprio telefono cellulare e apportare modifiche senza alcuna latenza visibile, il tutto mentre si è offline. Quando una connessione è presente e utilizzabile, CouchDB replicherà automaticamente tali modifiche sul tuo CouchDB cloud.

CouchDB è un database progettato per funzionare su Internet oggi per le applicazioni desktop di oggi e per i dispositivi connessi attraverso i quali accediamo a Internet.


Passaggio 1: installazione di CouchDB

Il modo più semplice per installare CouchDB sul tuo sistema è andare su CouchOne e scaricare una distribuzione CouchDB per il tuo sistema operativo - OSX nel mio caso. Scarica il file zip, estrailo e rilascia CouchDBX nella cartella delle applicazioni (istruzioni per altri sistemi operativi su CouchOne).

Finalmente, apri CouchDBX.


Passaggio 2: benvenuto in Futon

Dopo aver avviato CouchDB, dovresti vedere il pannello di controllo Futon nell'applicazione CouchDBX. Nel caso in cui non sia possibile, è possibile accedere a Futon tramite il browser. Guardando il registro, CouchDBX ci dice che CouchDB è stato avviato a http://127.0.0.1:5984/ (potrebbe essere diverso sul tuo sistema). Apri un browser e vai a http://127.0.0.1:5984/_utils/ e dovresti vedere Futon.

Durante il resto di questo tutorial userò Futon in Firefox. Avrò anche Firebug e la vista della console aperta per vedere tutte le richieste HTTP che Futon sta trasmettendo dietro le quinte. Questo è utile in quanto la tua applicazione può fare tutto ciò che sta facendo Futon. Andiamo avanti e creare un database chiamato mycouchshop.

CouchDB jQuery Plugin

Futon sta attualmente utilizzando un plugin jQuery per interagire con CouchDB. Puoi vedere quel plugin su http://127.0.0.1:5984/_utils/script/jquery.couch.js (ricorda che la tua porta potrebbe essere diversa). Questo ti dà un ottimo esempio di interazione con CouchDB.


Passaggio 3: Utenti in CouchDB

CouchDB, per impostazione predefinita, è completamente aperto, fornendo ad ogni utente i diritti di amministratore dell'istanza e di tutti i suoi database. Questo è ottimo per lo sviluppo, ma ovviamente negativo per la produzione. Andiamo avanti e configuriamo un amministratore. In basso a destra, vedrai "Benvenuto in Admin Party! Tutti sono admin! Risolvi questo".

Vai avanti e clicca Aggiustalo e darti un nome utente e una password. Questo crea un account amministratore e fornisce agli utenti anonimi l'accesso alle operazioni di lettura e scrittura su tutti i database, ma senza privilegi di configurazione.

Altro sugli utenti

In CouchDB non sarebbe saggio creare un singolo superutente e fare in modo che l'utente faccia tutto il read / write.

Gli utenti di CouchDB possono essere un po 'confusi da comprendere inizialmente, specialmente se si è abituati a creare un singolo utente per l'intera applicazione e quindi a gestire gli utenti da soli all'interno di una tabella utenti (non la tabella degli utenti di MySQL). In CouchDB, non sarebbe saggio creare un singolo superutente e fare in modo che l'utente faccia tutto il read / write, perché se la tua app è lato client, allora le credenziali di questo super user saranno in bella vista nel tuo codice sorgente JavaScript.

CouchDB ha creato la creazione e l'autenticazione dell'utente. Puoi creare utenti con il plugin jQuery usando $ .Couch.signup (). Questi sono essenzialmente gli utenti del tuo sistema. Gli utenti sono solo documenti JSON come tutto il resto, quindi puoi memorizzare qualsiasi altro attributo che desideri, ad esempio, l'email. È quindi possibile utilizzare i gruppi all'interno di CouchDB per controllare i documenti a cui ogni utente ha accesso in scrittura. Ad esempio, è possibile creare un database per l'utente a cui possono scrivere e quindi aggiungerli a un gruppo con accesso in lettura agli altri database come richiesto.


Passaggio 4: creazione di un documento del prodotto

Ora creiamo il nostro primo documento utilizzando Futon attraverso i seguenti passaggi:

  1. Apri il mycouchshop Banca dati.
  2. Fai clic su "Nuovo documento".
  3. Fai clic su "Aggiungi campo" per iniziare ad aggiungere dati al documento JSON. Si noti come un ID è pre-compilato per te, ti consiglio vivamente di non cambiarlo. Aggiungi chiave "nome" con il valore di "Nettuts CouchDB Tutorial One".
  4. Assicurati di fare clic sul segno di spunta accanto a ciascun attributo per salvarlo.
  5. Fai clic su "Salva documento".

Vai su un livello, torna al database e dovresti vedere un documento elencato con l'ID precedente come chiave e un valore che inizia conRev: . Questo è il documento JSON che hai appena creato.


Passaggio 5: aggiornamento di un documento

CouchDB è un database solo append: i nuovi aggiornamenti vengono aggiunti al database e non sovrascrivono la versione precedente. Ogni nuovo aggiornamento di un documento JSON con un ID preesistente aggiungerà una nuova revisione. Questo è ciò che significa la chiave di revisione inserita automaticamente. Segui i passaggi seguenti per vedere questo in azione:

  • Visualizzazione dei contenuti del mycouchshop database, fare clic sull'unico record visibile.
  • Aggiungi un altro attributo con il tasto "tipo" e il valore "prodotto".
  • Hit "Salva documento".

Dopo aver premuto Salva, una nuova chiave di revisione dovrebbe essere visibile a partire dal numero 2. Tornando indietro di un livello mycouchshop vista del database, vedrai comunque un solo documento, questa è l'ultima revisione del nostro documento prodotto.

revisioni

Mentre CouchDB usa le revisioni internamente, cerca di non appoggiarti troppo. Le revisioni possono essere pulite facilmente tramite Futon e non sono progettate per essere utilizzate come sistema di controllo di revisione. CouchDB utilizza le revisioni come parte della sua funzionalità di replica.


Passaggio 6: creazione di un documento mediante cURL

Ho già accennato al fatto che CouchDB usa un'interfaccia RESTful e il lettore con gli occhi aquilini avrebbe notato Futon usando questo tramite la console in Firebug. Nel caso in cui non l'hai fatto, provalo inserendo un documento usando cURL tramite il Terminale.

Primo, creiamo un documento JSON con i seguenti contenuti e salviamolo sul desktop chiamando il file person.json.

 "nomefile": "Gavin", "cognome": "Cooper", "tipo": "persona"

Il prossimo, apri il terminale ed eseguilo cd ~ / Desktop / inserendo la directory corretta e quindi eseguendo l'inserimento con curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @ person.json -H "Content-Type: application / json". CouchDB avrebbe dovuto restituire un documento JSON simile a quello qui sotto.

  "Ok": true, "id": "c6e2f3d7f8d0c91ce7938e9c0800131c", "rev": "1-abadd48a09c270047658dbc38dc8a892"

Questo è l'ID e il numero di revisione del documento inserito. CouchDB segue la convenzione RESTful e quindi:

  • INVIARE - crea un nuovo record
  • OTTENERE - legge i record
  • METTERE - aggiorna un record
  • ELIMINA - cancella un record

Passaggio 7: visualizzazione di tutti i documenti

Possiamo verificare ulteriormente il nostro inserimento visualizzando tutti i documenti nel nostro mycouchshop database eseguendo curl -X OTTIENI http://127.0.0.1:5984/mycouchshop/_all_docs.


Passaggio 8: creazione di una funzione mappa semplice

La visualizzazione di tutti i documenti è praticamente inutile in termini pratici. Quello che sarebbe più ideale è vedere tutti i documenti del prodotto. Segui i passaggi sottostanti per ottenere questo:

  • All'interno di Futon, fai clic sul menu a discesa della vista e seleziona "Vista temporanea".
  • Questa è la mappa che riduce l'editor all'interno di Futon. Copia il codice qui sotto nella funzione mappa.
     function (doc) if (doc.type === "product" && doc.name) emit (doc.name, doc); 
  • Fai clic su Esegui e dovresti vedere il singolo prodotto che abbiamo aggiunto in precedenza.
  • Vai avanti e rendi questa vista permanente salvandola.

Dopo aver creato questa semplice funzione mappa, ora possiamo richiedere questa vista e vedere il suo contenuto su HTTP usando il seguente comando curl -X OTTIENI http://127.0.0.1:5984/mycouchshop/_design/products/_view/products.

Una piccola cosa da notare è come otteniamo l'ID e la revisione del documento di default.


Passaggio 9: esecuzione di una riduzione

Per eseguire una riduzione utile, aggiungiamo un altro prodotto al nostro database e aggiungiamo un attributo prezzo con il valore di 1,75 al nostro primo prodotto.

 "nome": "Il mio prodotto", "prezzo": 2.99, "tipo": "prodotto"

Per la nostra nuova visione, includeremo una riduzione e una mappa. Per prima cosa, dobbiamo mappare come definito di seguito.

 function (doc) if (doc.type === "product" && doc.price) emit (doc.id, doc.price); 

La suddetta funzione mappa controlla semplicemente se il documento immesso è un prodotto e ha un prezzo. Se queste condizioni sono state soddisfatte, il prezzo dei prodotti viene emesso. La funzione di riduzione è sotto.

 funzione (chiavi, prezzi) somma di ritorno (prezzi); 

La funzione sopra riportata prende i prezzi e restituisce la somma utilizzando una delle funzioni di riduzione integrate di CouchDB. Assicurati di controllare l'opzione di riduzione nella parte in alto a destra della tabella dei risultati, altrimenti potresti non riuscire a vedere i risultati della riduzione. Potrebbe essere necessario eseguire un hard-refresh sulla pagina per visualizzare l'opzione di riduzione


Conclusione

In questo tutorial, abbiamo preso uno sguardo breve ma concentrato su CouchDB. Abbiamo visto la potenza potenziale di CouchDB e quanto è facile iniziare. Sono sicuro che hai molte domande a questo punto quindi sentiti libero di suonare in basso. Grazie mille per la lettura!