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.
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.
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.
Alcuni dati su CouchDB che dovresti sapere:
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.
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.
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
.
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.
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.
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.
Ora creiamo il nostro primo documento utilizzando Futon attraverso i seguenti passaggi:
mycouchshop
Banca dati.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.
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:
mycouchshop
database, fare clic sull'unico record visibile.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.
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.
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:
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
.
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:
function (doc) if (doc.type === "product" && doc.name) emit (doc.name, doc);
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.
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
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!