Noțiuni de bază cu CouchDB

NoSQL a fost unul dintre cele mai discutate subiecte din ultimele luni. Acest tutorial vă va prezenta CouchDB, o implementare NoSQL și vă va învăța cum să începeți cu platforma.


Ce este NoSQL??

NoSQL este schema gratuită - nu trebuie să decideți structura în față.

NoSQL [nu numai SQL] este o mișcare către magazinele de documente care nu utilizează modelul relațional. Schimbarea paradigmelor fundamentale este în modul în care stochează datele. De exemplu, atunci când trebuie să stocați date despre o factură, în RDBMS ar trebui să distilați aceste informații în tabele și apoi să utilizați o limbă de server pentru a transforma aceste date în obiecte reale. Pe de altă parte, în NoSQL, stocați doar factura. NoSQL este schema gratuită, ceea ce înseamnă că nu aveți nevoie să vă proiectați tabelele și să le structurați în față - puteți începe pur și simplu să stocați noi valori.

Continuând exemplul facturii, unele facturi pot include un număr de TVA, altele nu pot. Într-o RDBMS, va trebui să spuneți tabelului dvs. să accepte mai întâi un număr de TVA și apoi să fie nul. În NoSQL, cu toate acestea, puteți stoca doar facturi cu sau fără un număr de TVA - nu există nicio schemă. Rețineți că NoSQL nu este un glonț de argint. Dacă datele dvs. sunt într-adevăr relaționale, lipirea cu RDBMS ar fi alegerea potrivită.


Interogarea bazelor de date NoSQL

MapReducing are avantaje asupra interogărilor SQL deoarece sarcina hartă / reducere poate fi distribuită între mai multe noduri, ceva nu este posibil în RDBMS.

Bazele de date NoSQL utilizează harta / reducerea la interogarea și indexarea bazei de date. În RDBMS, executați o interogare care unește mai multe tabele împreună pentru a crea mai întâi un grup de date și apoi interogarea rulează crearea unui set de rezultate, un subset al datelor globale. În NoSQL, utilizați harta / reduceți pentru a crea o vizualizare (similară cu rezultatul), această vizualizare fiind un subset al datelor globale.

Harta este în esență extragerea datelor și reducerea, agregarea datelor. Cu cât sunteți mai familiarizați cu RDBMS, cu atât va fi mai dificilă apucarea / reducerea hărții. Harta Reducționarea avantajelor față de interogările SQL, deoarece hartă / reducerea sarcinii poate fi distribuită între mai multe noduri, ceea ce nu este posibil în RDBMS. Adăugarea unei noi înregistrări în baza de date nu constituie întotdeauna sarcina de hartă / reducere complet redată.


Introducerea CouchDB

Câteva informații despre CouchDB pe care ar trebui să le cunoașteți:

  • CouchDB este o bază de date JSON orientată spre documente, scrisă în Erlang.
  • Este o bază de date extrem de concurentă proiectată pentru a fi replicabilă cu ușurință, orizontal, pe numeroase dispozitive și tolerantă la erori.
  • Face parte din generația de baze de date NoSQL.
  • Acesta este un proiect de fundație open source Apache.
  • Permite aplicațiilor să stocheze documentele JSON prin intermediul interfeței RESTful.
  • Se utilizează harta / reducerea la indexarea și interogarea bazei de date.

Beneficiile majore ale CouchDB

  • Documentele JSON - Tot ce este stocat în CouchDB se reduce la un document JSON.
  • RESTful Interface - De la crearea la replicarea la introducerea datelor, fiecare gestionare și sarcină de date în CouchDB poate fi realizată prin HTTP.
  • Replicarea N-Master - Puteți utiliza o cantitate nelimitată de "maeștri", ceea ce face ca unele topologii de replicare foarte interesante.
  • Construit pentru offline - CouchDB poate replica pe dispozitive (cum ar fi telefoanele Android) care pot să se deconecteze și să se ocupe de sincronizarea datelor pentru dvs. atunci când dispozitivul este din nou conectat.
  • Filtre de replicare - Puteți filtra cu exactitate datele pe care doriți să le replicați la diferite noduri.

Punându-le pe toți împreună

CouchDB este o bază de date concepută pentru a rula pe internetul de astăzi.

CouchDB vă permite să scrieți o aplicație pe partea clientului care vorbește direct cu Canapeaua fără a avea nevoie de un strat intermediar de pe server, reducând în mod semnificativ timpul de dezvoltare. Cu CouchDB, puteți să vă ocupați cu ușurință de cerere prin adăugarea mai ușoară a nodurilor de replicare. CouchDB vă permite să reproduceți baza de date către clientul dvs. și cu filtrele pe care le puteți replica și pe acele date specifice utilizatorului.

Având baza de date stocată local înseamnă că aplicația dvs. din partea clientului poate funcționa fără aproape nici o latență. CouchDB se va ocupa de replicarea cloud-ului pentru tine. Utilizatorii dvs. puteau accesa facturile pe telefonul mobil și efectuau modificări fără o latență vizibilă, toate fiind offline. Atunci când o conexiune este prezentă și utilizabilă, CouchDB va replica automat aceste modificări în cloudul CouchDB.

CouchDB este o bază de date concepută pentru a rula pe internetul de azi pentru aplicațiile desktop de astăzi și pentru dispozitivele conectate prin care accesăm internetul.


Pasul 1 - Instalarea CouchDB

Cel mai simplu mod de a obține CouchDB în funcțiune pe sistemul dvs. este să vă îndreptați către CouchOne și să descărcați o distribuție CouchDB pentru sistemul dvs. OS - OSX în cazul meu. Descărcați zipul, extrageți-l și plasați CouchDBX în dosarul meu de aplicații (instrucțiuni pentru alte sisteme de operare pe CouchOne).

În cele din urmă, deschideți CouchDBX.


Pasul 2 - Bun venit la Futon

După ce CouchDB a început, ar trebui să vedeți panoul de control Futon din aplicația CouchDBX. În cazul în care nu puteți, puteți accesa Futon prin browserul dvs. Privind la jurnal, CouchDBX ne spune că CouchDB a început la http://127.0.0.1:5984/ (pot fi diferite în sistemul dvs.). Deschideți un browser și mergeți la http://127.0.0.1:5984/_utils/ și ar trebui să-l vezi pe Futon.

Pe tot parcursul acestui tutorial voi folosi Futon în Firefox. Voi avea, de asemenea, Firebug și vizualizarea consolei deschise pentru a vedea toate cererile HTTP pe care Futon le trimite în spatele scenei. Acest lucru este util deoarece aplicația dvs. poate face tot ce face Futon. Să mergem mai departe și să creăm o bază de date numită mycouchshop.

CouchDB jQuery Plugin

Futon utilizează de fapt un plugin jQuery pentru a interacționa cu CouchDB. Puteți vedea pluginul la http://127.0.0.1:5984/_utils/script/jquery.couch.js (țineți cont de portul dvs. poate fi diferit). Acest lucru vă oferă un bun exemplu de interacțiune cu CouchDB.


Pasul 3 - Utilizatorii din CouchDB

CouchDB, în mod implicit, este complet deschis, oferind fiecărui utilizator drepturi de administrator pentru instanță și toate bazele sale de date. Acest lucru este minunat pentru dezvoltare, dar evident rău pentru producție. Hai să mergem mai departe și să instalezi un administrator. În partea din dreapta jos, veți vedea "Bine ați venit la Admin Party! Toată lumea este admin!.

Mergeți mai departe și faceți clic pe repara asta și dați-vă un nume de utilizator și o parolă. Acest lucru creează un cont de administrator și permite accesul utilizatorilor anonimi la operațiile de citire și scriere pe toate bazele de date, dar fără privilegii de configurare.

Mai multe despre utilizatori

În CouchDB nu ar fi înțelept să creezi un singur super-utilizator și să îl faci pe acel utilizator să citească / scrie.

Utilizatorii din CouchDB pot fi puțin confuz să înțeleagă inițial, mai ales dacă sunteți obișnuiți să creați un singur utilizator pentru întreaga aplicație și apoi să vă gestionați utilizatorii în cadrul unei tabele de utilizatori (nu tabelul utilizatorilor MySQL). În CouchDB, nu ar fi înțelept să creați un singur utilizator super și să îl faceți pe acel utilizator să citească / scrie, deoarece dacă aplicația dvs. are client, atunci acreditările acestui super utilizator vor fi vizibile în codul sursă JavaScript.

CouchDB are creare de utilizatori și autentificare copiate. Puteți crea utilizatori cu ajutorul pluginului jQuery utilizând $ .Couch.signup (). Acestea devin, în esență, utilizatorii sistemului dvs. Utilizatorii sunt doar documente JSON ca orice altceva, astfel încât să puteți stoca toate atributele suplimentare pe care le doriți, cum ar fi e-mail, de exemplu. Apoi puteți folosi grupuri în cadrul CouchDB pentru a controla documentele la care fiecare utilizator are acces la scriere. De exemplu, puteți crea o bază de date pentru acel utilizator la care să poată scrie și apoi să le adauge într-un grup cu acces de citire la celelalte baze de date, după cum este necesar.


Pasul 4 - Crearea unui document de produs

Acum, să creăm primul nostru document folosind Futon prin următorii pași:

  1. Deschide mycouchshop Bază de date.
  2. Faceți clic pe "Document nou".
  3. Dați clic pe "Adăugați câmp" pentru a începe să adăugați date în documentul JSON. Observați cum este prestabilită o identificare de identitate, aș recomanda să nu modificați acest lucru. Adăugați "nume" cu valoarea "Nettuts CouchDB Tutorial One".
  4. Asigurați-vă că faceți clic pe bifă lângă fiecare atribut pentru ao salva.
  5. Faceți clic pe "Salvați documentul".

Treceți la un nivel, înapoi la baza de date și ar trebui să vedeți un document enumerat cu codul anterior ca cheie și o valoare care începe cuRev: . Acesta este documentul JSON pe care tocmai l-ați creat.


Pasul 5 - Actualizarea unui document

CouchDB este o bază de date anexată numai - actualizări noi sunt adăugate la baza de date și nu suprascrie versiunea veche. Fiecare actualizare nouă a unui document JSON cu un ID pre-existent va adăuga o nouă revizuire. Aceasta înseamnă cheia de revizuire introdusă automat. Urmați pașii de mai jos pentru a vedea acest lucru în acțiune:

  • Vizualizarea conținutului mycouchshop faceți clic pe singura înregistrare vizibilă.
  • Adăugați un alt atribut cu tasta "tip" și valoarea "produs".
  • Apăsați pe "Salvați documentul".

După ce ați lovit salvați, o nouă cheie de revizuire ar trebui să fie vizibilă începând cu numărul 2. Revenind la un nivel la mycouchshop vizualizarea bazei de date, veți vedea în continuare doar un singur document, aceasta este ultima revizuire a documentului nostru de produs.

revizuiri

În timp ce CouchDB folosește revizuiri interne, încercați să nu vă sprijiniți prea mult. Reviziile pot fi curățate cu ușurință de către Futon și nu sunt concepute pentru a fi utilizate ca sistem de control al revizuirii. CouchDB utilizează reviziile ca parte a funcționalității sale de replicare.


Pasul 6 - Crearea unui document utilizând cURL

Am menționat deja că CouchDB folosește o interfață RESTful, iar cititorul cu ochi de vultur ar fi observat că Futon va folosi acest lucru prin consola din Firebug. În cazul în care nu ați făcut-o, permiteți-o să dovedească acest lucru prin introducerea unui document folosind cURL prin Terminal.

Primul, să creăm un document JSON cu conținutul de mai jos și să îl salvăm pe desktop, care sună la fișier person.json.

 "nume": "Gavin", "nume": "Cooper", "tip": "persoană"

Următor →, deschideți terminalul și executați cd ~ / Desktop / punându-vă în directorul corect și apoi efectuați inserarea cu curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @ person.json -H "Content-Type: aplicație / json". CouchDB ar fi trebuit să returneze un document JSON similar celui de mai jos.

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

Acesta este ID-ul și numărul de revizie al documentului inserat. CouchDB urmează convenția RESTful și astfel:

  • POST - creează o înregistrare nouă
  • OBȚINE - citește înregistrări
  • A PUNE - actualizează o înregistrare
  • ȘTERGE - șterge o înregistrare

Pasul 7 - Vizualizarea tuturor documentelor

Putem verifica suplimentar inserarea noastră prin vizualizarea tuturor documentelor din site-ul nostru mycouchshop baza de date prin executare curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs.


Pasul 8 - Crearea unei funcții simple a hărții

Vizionarea tuturor documentelor este destul de inutilă din punct de vedere practic. Ce ar fi mai ideal este să vizualizați toate documentele produsului. Urmați pașii de mai jos pentru a realiza acest lucru:

  • În Futon, faceți clic pe meniul derulant din vizualizare și selectați "Vizualizare temporară".
  • Acesta este editorul de reducere a hărților din Futon. Copiați codul de mai jos în funcția de hartă.
     funcția (doc) if (doc.type === "product" && doc.name) emit (doc.name, doc); 
  • Faceți clic pe alergare și ar trebui să vedeți singurul produs pe care l-am adăugat anterior.
  • Continuați și faceți permanent această vizualizare salvând-o.

După crearea acestei simple funcții de hartă, putem cere acum această vizualizare și vom vedea conținutul său prin HTTP utilizând următoarea comandă curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products.

Un mic lucru pe care trebuie să-l observați este modul în care obținem ID-ul documentului și revizuirea în mod implicit.


Pasul 9 - Efectuarea unei reduceri

Pentru a efectua o reducere utilă, să adăugăm un alt produs în baza noastră de date și să adăugăm un atribut de preț cu valoarea de 1,75 la primul nostru produs.

 "nume": "Produsul meu", "preț": 2,99, "tip": "produs"

Pentru noul nostru punct de vedere, vom include o reducere, precum și o hartă. În primul rând, trebuie să definim hărțile definite mai jos.

 funcția (doc) if (doc.type === "produs" && doc.price) emit (doc.id, doc.price); 

Funcția hartă de mai sus verifică pur și simplu dacă documentul introdus este un produs și că are un preț. Dacă aceste condiții au fost îndeplinite, prețul produselor este emis. Funcția de reducere este mai jos.

 funcție (chei, prețuri) sumă de returnare (prețuri); 

Funcția de mai sus ia prețurile și returnează suma utilizând una dintre funcțiile de reducere construite în CouchDB. Asigurați-vă că verificați opțiunea de reducere din partea dreaptă sus a tabelului cu rezultate, deoarece altfel nu veți putea vedea rezultatele reducerii. Este posibil să fie nevoie să faceți o reîncărcare puternică pe pagină pentru a vedea opțiunea de reducere


Concluzie

În acest tutorial, am făcut o privire scurtă, dar concentrată asupra CouchDB. Am văzut puterea potențială a lui CouchDB și cât de ușor este să începeți. Sunt sigur că aveți multe întrebări în acest moment, deci nu ezitați să faceți clic pe mai jos. Vă mulțumesc foarte mult pentru lectură!

Cod