Komme i gang med CouchDB

NoSQL har vært en av de mest snakket om emner de siste par månedene. Denne opplæringen vil introdusere deg til CouchDB, en NoSQL-implementering og lære deg hvordan du kommer i gang med plattformen.


Hva er NoSQL?

NoSQL er skjemafri - du trenger ikke å bestemme strukturen foran.

NoSQL [ikke bare SQL] er en bevegelse mot dokumentforretninger som ikke benytter seg av relasjonsmodellen. Det grunnleggende paradigmeskiftet er i måten de lagrer data på. For eksempel, når du trenger å lagre data om en faktura, må du i RDBMS distillere denne informasjonen i tabeller og deretter bruke et språk på server-siden for å transformere disse dataene tilbake til virkelige objekter. På den annen side, i NoSQL, lagrer du bare fakturaen. NoSQL er skjemafri, noe som betyr at du ikke trenger å designe dine bord og strukturer opp foran - du kan bare begynne å lagre nye verdier.

Ved å fortsette fakturaeksemplet kan enkelte fakturaer inkludere et momsnummer, noen kan ikke. I en RDBMS må du fortelle bordet ditt å først akseptere et momsnummer og da at det muligens kan være null. I NoSQL kan du imidlertid bare lagre fakturaer med eller uten et momsnummer - det er ikke noe skjema. Husk at NoSQL ikke er en sølvkule. Hvis dataene dine er relasjonelle, vil det være riktig å holde fast med RDBMS.


Forespørsel NoSQL Databaser

MapReducing har fordeler over SQL-spørringer fordi kartet / redusere oppgaven kan fordeles mellom flere noder, noe som ikke er mulig i RDBMS.

NoSQL databaser bruker kart / redusere for å spørre og indeksere databasen. I RDBMS kjører du en spørring som knytter seg til flere tabeller sammen for å først opprette et datapool og deretter kjører spørringen opprette en resultatsett, en delmengde av de totale dataene. I NoSQL bruker du kart / reduksjon for å opprette en 'visning' (lik en resultat) denne visningen er en del av de samlede dataene.

Kartet utvider i hovedsak data og reduserer dataaggregering. Jo mer kjent du er med RDBMS, jo vanskeligere å gripe kart / redusere vil være. MapReducing fordeler over SQL-spørringer fordi kartet / redusere oppgaven kan fordeles mellom flere noder, noe ikke mulig i RDBMS. Å legge til en ny post i databasen utgjør ikke alltid at kart / redusere oppgaven blir fullstendig omvendt.


Vi presenterer CouchDB

Noen få fakta om CouchDB som du burde vite:

  • CouchDB er en JSON dokumentorientert database skrevet i Erlang.
  • Det er en svært samtidig database som er utformet for å være enkelt å kopiere, horisontalt, på tvers av mange enheter og være feiltolerant.
  • Det er en del av NoSQL-generasjonen av databaser.
  • Det er et open source Apache grunnprosjekt.
  • Det tillater applikasjoner å lagre JSON-dokumenter via sitt RESTful-grensesnitt.
  • Den bruker kart / redusere til indeks og spørre databasen.

Store fordeler med CouchDB

  • JSON Dokumenter - Alt lagret i CouchDB koker ned til et JSON-dokument.
  • RESTful Interface - Fra opprettelse til replikering til datainnsetting, kan alle administrasjons- og dataoppgaver i CouchDB gjøres via HTTP.
  • N-Master Replication - Du kan gjøre bruk av en ubegrenset mengde 'masters', noe som gjør for noen svært interessante replikasjonstopologier.
  • Bygget for Offline - CouchDB kan replikere til enheter (som Android-telefoner) som kan gå offline og håndtere datasynkronisering for deg når enheten er tilbake online.
  • Replikeringsfiltre - Du kan nøyaktig filtrere dataene du ønsker å replikere til forskjellige noder.

Sette alt sammen

CouchDB er en database designet for å kjøre på internett i dag.

CouchDB lar deg skrive et klientsideprogram som snakker direkte til saken uten at det er behov for et mellomstort i server-siden, noe som reduserer utviklings tiden betydelig. Med CouchDB, kan du enkelt håndtere etterspørselen ved å legge til flere repliseringsnoder med letthet. CouchDB lar deg kopiere databasen til klienten din og med filtre kan du til og med kopiere den bestemte brukerens data.

Å ha databasen lagret lokalt betyr at klientsiden din kan kjøre med nesten ingen latens. CouchDB vil håndtere replikering til skyen for deg. Brukerne dine kunne få tilgang til sine fakturaer på mobiltelefonen og gjøre endringer uten merkbar ventetid, alt sammen mens de er offline. Når en tilkobling er til stede og brukbar, vil CouchDB automatisk kopiere disse endringene til Cloud CouchDB.

CouchDB er en database designet for å kjøre på internett i dag for dagens desktop-lignende applikasjoner og de tilkoblede enhetene som vi får tilgang til på internett.


Trinn 1 - Installere CouchDB

Den enkleste måten å få CouchDB opp og kjører på systemet er å gå til CouchOne og laste ned en CouchDB-distribusjon for OS-OSX i mitt tilfelle. Last ned zip, trekk ut det og slipp CouchDBX i min applikasjonsmappe (instruksjoner for andre OS på CouchOne).

Til slutt, åpne CouchDBX.


Trinn 2 - Velkommen til Futon

Etter at CouchDB har startet, bør du se Futon-kontrollpanelet i CouchDBX-applikasjonen. I tilfelle du ikke kan, kan du få tilgang til Futon via nettleseren din. Ser på loggen, forteller CouchDBX oss CouchDB ble startet på http://127.0.0.1:5984/ (kan være forskjellig på systemet ditt). Åpne en nettleser og gå til http://127.0.0.1:5984/_utils/ og du bør se Futon.

Gjennom resten av denne opplæringen vil jeg bruke Futon i Firefox. Jeg vil også ha Firebug og konsollvisningen åpen for å se alle HTTP-forespørslene Futon sender bak kulissene. Dette er nyttig ettersom søknaden din kan gjøre alt Futon gjør. La oss gå videre og opprette en database som heter mycouchshop.

CouchDB jQuery Plugin

Futon bruker faktisk et jQuery-plugin for å samhandle med CouchDB. Du kan se det pluginet på http://127.0.0.1:5984/_utils/script/jquery.couch.js (Husk at porten din kan være annerledes). Dette gir deg et godt eksempel på interaksjon med CouchDB.


Trinn 3 - Brukere i CouchDB

CouchDB, som standard, er helt åpen, noe som gir hver bruker adminrettigheter til forekomsten og alle dens databaser. Dette er flott for utvikling, men åpenbart dårlig for produksjon. La oss gå videre og sette opp en admin. Nederst til høyre ser du "Velkommen til Admin Party! Alle er admin! Løs dette".

Gå videre og klikk fiks dette og gi deg selv et brukernavn og passord. Dette skaper en adminkonto og gir anonyme brukere tilgang til å lese og skrive operasjoner på alle databasene, men ingen konfigurasjonsrettigheter.

Mer om brukere

I CouchDB ville det være uklokt å lage en enkelt superbruker og få den brukeren til å gjøre alt lese / skrive.

Brukere i CouchDB kan være litt forvirrende å forstå først, spesielt hvis du er vant til å opprette en enkelt bruker for hele programmet og deretter administrere brukere selv i en brukertabell (ikke MySQL-brukerstabellen). I CouchDB ville det være uklokt å skape en enkelt superbruker og få den brukeren til å gjøre alt les / skriv, fordi hvis appen din er klient-siden, vil denne superbrukerens legitimasjon være i klart syn i JavaScript-kildekoden.

CouchDB har brukeropprettelse og autentisering bakket inn. Du kan opprette brukere med jQuery-pluginet ved hjelp av $ .Couch.signup (). Disse blir i hovedsak brukerne av systemet ditt. Brukere er bare JSON-dokumenter som alt annet, slik at du kan lagre eventuelle andre attributter du ønsker, for eksempel e-post. Du kan deretter bruke grupper innenfor CouchDB til å kontrollere hvilke dokumenter hver bruker har skrive tilgang til. For eksempel kan du opprette en database for den brukeren som de kan skrive til og deretter legge dem til en gruppe med leseadgang til de andre databasene etter behov.


Trinn 4 - Opprette et produktdokument

La oss nå lage vårt første dokument ved hjelp av Futon gjennom følgende trinn:

  1. Åpne mycouchshop database.
  2. Klikk på "Nytt dokument".
  3. Klikk på "Legg til felt" for å begynne å legge til data i JSON-dokumentet. Legg merke til hvordan en ID er ferdigfylt for deg, jeg vil sterkt anbefale ikke å endre dette. Legg til nøkkel "navn" med verdien av "Nettuts CouchDB Tutorial One".
  4. Pass på at du klikker krysset ved siden av hvert attributt for å lagre det.
  5. Klikk på "Lagre dokument".

Gå opp et nivå, tilbake til databasen, og du bør se ett dokument oppført med forrige ID som nøkkel og en verdi som begynner medRev: . Dette er JSON-dokumentet du nettopp har opprettet.


Trinn 5 - Oppdaterer et dokument

CouchDB er en tilleggsdatabase - nye oppdateringer legges til databasen og overskriver ikke den gamle versjonen. Hver ny oppdatering til et JSON-dokument med en eksisterende ID vil legge til en ny versjon. Dette er hva den automatisk innsatte revisjonstasten betyr. Følg trinnene nedenfor for å se dette i aksjon:

  • Vise innholdet i mycouchshop database, klikk den eneste platen som er synlig.
  • Legg til et annet attributt med nøkkelen "type" og verdien "produkt".
  • Hit "Lagre dokument".

Etter å ha slått på lagring, bør en ny revisjonstast være synlig med nummer 2. Går tilbake til nivået til mycouchshop databasevisning, vil du fortsatt se bare ett dokument, dette er den siste revisjonen av produktdokumentet.

revisjoner

Mens CouchDB bruker revisjoner internt, prøv å ikke lene seg på det for mye. Revisjonene kan rengjøres gjennom Futon ganske enkelt, og det er ikke laget for å bli brukt som revisjonskontrollsystem. CouchDB bruker revisjonene som en del av replikasjonsfunksjonaliteten.


Trinn 6 - Opprette et dokument ved hjelp av cURL

Jeg har allerede nevnt at CouchDB bruker et RESTful grensesnitt og eagle eyed leseren ville ha lagt merke til Futon bruker dette via konsollen i Firebug. Hvis du ikke gjorde det, la oss bevise dette ved å sette inn et dokument ved hjelp av cURL via terminalen.

Først, la oss lage et JSON-dokument med innholdet under og lagre det på skrivebordet som ringer filen person.json.

 "fornavn": "Gavin", "etternavn": "Cooper", "type": "person")

neste, åpne terminalen og utfør cd ~ / skrivebord / sette deg i riktig katalog og deretter utføre innsatsen med krølle -X POST http://127.0.0.1:5984/mycouchshop/ -d @ person.json -H "Content-Type: application / json". CouchDB burde ha returnert et JSON-dokument som ligner på det nedenfor.

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

Dette er ID- og revisjonsnummeret til det innsatte dokumentet. CouchDB følger RESTful-konvensjonen og dermed:

  • POST - lager en ny post
  • - leser poster
  • SETTE - oppdaterer en plate
  • SLETT - sletter en post

Trinn 7 - Viser alle dokumenter

Vi kan videre verifisere vår innsats ved å se alle dokumentene i vår mycouchshop database ved å utføre curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs.


Trinn 8 - Opprette en enkel kartfunksjon

Å se alle dokumenter er ganske ubrukelig i praksis. Det som ville være mer ideelt er å se alle produktdokumenter. Følg trinnene nedenfor for å oppnå dette:

  • Innen Futon, klikk på visningen, og velg "Midlertidig visning".
  • Dette er kartet redusere editor innen Futon. Kopier koden under i kartfunksjonen.
     funksjon (doc) if (doc.type === "product" && doc.name) emit (doc.name, doc); 
  • Klikk på kjør, og du bør se enkeltproduktet vi la til tidligere.
  • Gå videre og gjør denne visningen permanent ved å lagre den.

Etter å ha opprettet denne enkle kartfunksjonen, kan vi nå be om denne visningen og se innholdet over HTTP ved hjelp av følgende kommando curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products.

En liten ting å legge merke til er hvordan vi får dokumentets ID og revisjon som standard.


Trinn 9 - Utfør en reduksjon

For å utføre en nyttig reduksjon, la oss legge til et annet produkt i vår database og legge til et prisattributt med verdien av 1,75 til vårt første produkt.

 "navn": "Mitt produkt", "pris": 2,99, "type": "produkt"

For vår nye visning vil vi inkludere en reduksjon så vel som et kart. Først må vi kartlegge definert som nedenfor.

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

Ovennevnte kartfunksjon kontrollerer bare for å se om det innførte dokumentet er et produkt og at det har en pris. Hvis disse betingelsene er oppfylt, sendes produktprisen. Reduksjonsfunksjonen er under.

 funksjon (nøkler, priser) returbeløp (priser); 

Ovennevnte funksjon tar prisene og returnerer summen ved å bruke en av CouchDBs innebygde reduseringsfunksjoner. Pass på at du sjekker reduksjonsalternativet øverst til høyre i resultattabellen, da du ellers ikke kan se resultatene av reduksjonen. Det kan hende du må gjøre en hardoppdatering på siden for å se reduksjonsalternativet


Konklusjon

I denne opplæringen tok vi et kort, men fokusert blikk på CouchDB. Vi så den potensielle kraften til CouchDB og hvor lett det er å komme i gang. Jeg er sikker på at du har mange spørsmål på dette punktet, så vær så snill å chime i nedenfor. Takk så mye for å lese!