Aan de slag met CouchDB

NoSQL is de afgelopen maanden een van de meest besproken onderwerpen geweest. Deze tutorial zal je kennis laten maken met CouchDB, een NoSQL-implementatie en je leren hoe je aan de slag kunt gaan met het platform.


Wat is NoSQL?

NoSQL is schema-vrij - u hoeft niet vooraf de structuur te bepalen.

NoSQL [niet alleen SQL] is een beweging naar documentarchieven die geen gebruik maken van het relationele model. De fundamentele paradigmaverschuiving zit in de manier waarop ze gegevens opslaan. Als u bijvoorbeeld gegevens over een factuur wilt opslaan, moet u deze in RDBMS distilleren in tabellen en vervolgens een servertaal gebruiken om deze gegevens weer om te zetten in echte objecten. Aan de andere kant slaat u in NoSQL de factuur gewoon op. NoSQL is schema-vrij, wat betekent dat u uw tabellen en structuur niet vooraf hoeft te ontwerpen - u kunt eenvoudig beginnen met het opslaan van nieuwe waarden.

Voortzetting van het voorbeeld van de factuur, sommige facturen kunnen een btw-nummer bevatten, andere niet. In een RDBMS moet u uw tabel vertellen om eerst een BTW-nummer te accepteren en vervolgens dat dit mogelijk nul is. In NoSQL kunt u echter facturen opslaan met of zonder een btw-nummer - er is geen schema. Houd in gedachten dat NoSQL geen zilveren kogel is. Als uw gegevens echt relationeel zijn, is vasthouden aan uw RDBMS de juiste keuze.


NoSQL-databases opvragen

MapReducing heeft voordelen ten opzichte van SQL-query's omdat de toewijzing van de toewijzing / taak kan worden verdeeld over meerdere knooppunten, iets wat niet mogelijk is in RDBMS.

NoSQL-databases gebruiken map / verminderen om de database te doorzoeken en te indexeren. In RDBMS voert u een query uit die meerdere tabellen samenvoegt om eerst een pool met gegevens te maken en vervolgens voert de query een resultaatset uit, een subset van de algemene gegevens. In NoSQL gebruikt u map / verkleinen om een ​​'weergave' te maken (vergelijkbaar met een resultaatset) deze weergave is een subset van de algemene gegevens.

Map is in feite het extraheren van gegevens en verminderen, aggregatie van gegevens. Hoe bekender je bent met RDBMS, hoe moeilijker het begrijpen van kaart / verkleinen zal zijn. MapReducing voordelen ten opzichte van SQL-query's omdat de toewijzing / taak verminderen kan worden verdeeld over meerdere knooppunten, iets niet mogelijk in RDBMS. Het toevoegen van een nieuwe record aan de database betekent niet altijd dat de toewijzing / taak volledig opnieuw wordt uitgevoerd.


Introductie van CouchDB

Een paar feiten over CouchDB die u moet weten:

  • CouchDB is een documentgerichte database van JSON geschreven in Erlang.
  • Het is een uiterst concurrente database die is ontworpen om eenvoudig repliceerbaar, horizontaal, op meerdere apparaten te zijn en fouttolerant te zijn.
  • Het maakt deel uit van het genereren van databases door NoSQL.
  • Het is een open source Apache Foundation-project.
  • Hiermee kunnen toepassingen JSON-documenten opslaan via de RESTful-interface.
  • Het maakt gebruik van map / verkleinen om de database te indexeren en te doorzoeken.

Belangrijkste voordelen van CouchDB

  • JSON-documenten - Alles opgeslagen in CouchDB komt neer op een JSON-document.
  • RESTful Interface - Van creatie tot replicatie tot gegevensinvoeging, elke beheer- en gegevenstaak in CouchDB kan via HTTP worden uitgevoerd.
  • N-Master-replicatie - U kunt een onbeperkt aantal 'meesters' gebruiken, wat zorgt voor een aantal zeer interessante replicatietopologieën.
  • Gebouwd voor offline - CouchDB kan repliceren naar apparaten (zoals Android-telefoons) die offline kunnen gaan en gegevenssynchronisatie kunnen verwerken wanneer het apparaat weer online is.
  • Replicatiefilters - U kunt precies de gegevens filteren die u naar verschillende knooppunten wilt repliceren.

Alles samenvoegen

CouchDB is een database die is ontworpen om op het internet van vandaag te worden gebruikt.

Met CouchDB kunt u een client-side-applicatie schrijven die rechtstreeks met de Couch praat zonder de noodzaak van een middenlaag aan de serverzijde, waardoor de ontwikkeltijd aanzienlijk verkort wordt. Met CouchDB kunt u eenvoudig aan de vraag voldoen door eenvoudig meerdere replicatieknooppunten toe te voegen. Met CouchDB kunt u de database repliceren naar uw client en met filters kunt u zelfs de gegevens van die specifieke gebruiker repliceren.

Als de database lokaal is opgeslagen, betekent dit dat uw client-side-applicatie vrijwel zonder vertraging kan werken. CouchDB zal de replicatie naar de cloud voor u afhandelen. Uw gebruikers hadden toegang tot hun facturen op hun mobiele telefoon en konden wijzigingen aanbrengen zonder noemenswaardige latency, terwijl ze allemaal offline waren. Wanneer een verbinding aanwezig en bruikbaar is, zal CouchDB deze wijzigingen automatisch repliceren naar uw cloud CouchDB.

CouchDB is een database die is ontworpen om op het internet van vandaag te worden gebruikt voor de desktop-achtige toepassingen van vandaag en de aangesloten apparaten waarmee we internet gebruiken.


Stap 1 - CouchDB installeren

De eenvoudigste manier om CouchDB op uw systeem te laten werken, is door naar CouchOne te gaan en in plaats daarvan een CouchDB-distributie voor uw OS-OSX te downloaden. Download de zip, pak het uit en zet CouchDBX in mijn toepassingsmap (instructies voor andere besturingssystemen op CouchOne).

Open ten slotte CouchDBX.


Stap 2 - Welkom bij Futon

Nadat CouchDB is gestart, zou u het configuratiescherm van Futon in de CouchDBX-applicatie moeten zien. In het geval dat u dit niet kunt, kunt u Futon openen via uw browser. Als we naar het logboek kijken, vertelt CouchDBX ons dat CouchDB is gestart bij http://127.0.0.1:5984/ (kan op uw systeem anders zijn). Open een browser en ga naar http://127.0.0.1:5984/_utils/ en je zou Futon moeten zien.

In de rest van deze tutorial zal ik Futon gebruiken in Firefox. Ik zal ook Firebug en de consoleweergave openen om alle HTTP-verzoeken te bekijken die Futon achter de schermen verzendt. Dit is handig omdat je applicatie alles kan wat Futon doet. Laten we doorgaan en een database maken met de naam mycouchshop.

CouchDB jQuery-plug-in

Futon gebruikt eigenlijk een jQuery-plug-in om te communiceren met CouchDB. U kunt die plug-in bekijken op http://127.0.0.1:5984/_utils/script/jquery.couch.js (houd er rekening mee dat uw poort anders kan zijn). Dit geeft u een goed voorbeeld van interactie met CouchDB.


Stap 3 - Gebruikers in CouchDB

CouchDB is standaard volledig geopend en geeft alle gebruikers beheerdersrechten voor de instance en alle bijbehorende databases. Dit is geweldig voor ontwikkeling maar uiteraard slecht voor de productie. Laten we doorgaan en een beheerder instellen. Rechtsonder ziet u "Welcome to Admin Party! Everyone is admin!".

Ga je gang en klik repareer dit en geef jezelf een gebruikersnaam en wachtwoord. Hiermee wordt een beheerdersaccount gemaakt en krijgen anonieme gebruikers toegang tot lees- en schrijfbewerkingen in alle databases, maar geen configuratieprivileges.

Meer over gebruikers

In CouchDB zou het onverstandig zijn om een ​​enkele supergebruiker te maken en die gebruiker alle lees- en schrijfbewerkingen te laten doen.

Gebruikers in CouchDB kunnen in eerste instantie een beetje verwarrend zijn om te begrijpen, vooral als u gewend bent om één gebruiker te maken voor uw gehele applicatie en vervolgens gebruikers zelf te beheren binnen een gebruikers-tabel (niet de tabel MySQL-gebruikers). In CouchDB zou het niet verstandig zijn om één supergebruiker te maken en die gebruiker alle lees- en schrijfbewerkingen te laten doen, want als uw app client-side is, dan zijn de referenties van deze supergebruiker duidelijk zichtbaar in uw JavaScript-broncode.

CouchDB heeft gebruikerscreatie en authenticatie ingebakken. U kunt gebruikers maken met de plug-in jQuery met $ .Couch.signup (). Deze worden in wezen de gebruikers van uw systeem. Gebruikers zijn net JSON-documenten zoals al het andere, dus u kunt alle extra kenmerken opslaan die u bijvoorbeeld een e-mail wenst. U kunt dan groepen binnen CouchDB gebruiken om te bepalen tot welke documenten elke gebruiker schrijftoegang heeft. U kunt bijvoorbeeld een database maken voor die gebruiker waarnaar ze kunnen schrijven en deze vervolgens toevoegen aan een groep met leestoegang tot de andere databases, zoals vereist.


Stap 4 - Een productdocument maken

Laten we nu ons eerste document met behulp van Futon maken door de volgende stappen:

  1. Open de mycouchshop databank.
  2. Klik op "Nieuw document".
  3. Klik op 'Veld toevoegen' om gegevens aan het JSON-document toe te voegen. Merk op hoe een ID vooraf voor u is ingevuld, ik zou sterk adviseren om dit niet te veranderen. Voeg de sleutel 'naam' toe met de waarde van 'Nettuts CouchDB Tutorial One'.
  4. Zorg ervoor dat u op het vinkje naast elk attribuut klikt om het op te slaan.
  5. Klik op "Document opslaan".

Ga een niveau omhoog, terug naar de database en je zou één document moeten zien met de vorige ID als de sleutel en een waarde die begint metRev: . Dit is het JSON-document dat u zojuist hebt gemaakt.


Stap 5 - Een document bijwerken

CouchDB is een alleen-toevoegen database - nieuwe updates worden toegevoegd aan de database en overschrijven de oude versie niet. Elke nieuwe update van een JSON-document met een reeds bestaande ID voegt een nieuwe revisie toe. Dit is wat de automatisch ingevoegde revisiesleutel betekent. Volg de onderstaande stappen om dit in actie te zien:

  • De inhoud van de bekijken mycouchshop database, klik op het enige record zichtbaar.
  • Voeg een ander kenmerk toe met de sleutel "type" en de waarde "product".
  • Druk op "Document opslaan".

Nadat u op Opslaan hebt geklikt, moet een nieuwe revisiesleutel zichtbaar zijn beginnend met het nummer 2. Een niveau terugzetten naar de mycouchshop databaseweergave, u zult nog steeds slechts één document zien, dit is de laatste herziening van ons productdocument.

herzieningen

Hoewel CouchDB interne revisies gebruikt, probeer er niet te veel op te leunen. De revisies kunnen vrij eenvoudig door Futon worden opgeschoond en het is niet ontworpen om te worden gebruikt als een revisiecontrolesysteem. CouchDB gebruikt de revisies als onderdeel van de replicatiefunctionaliteit.


Stap 6 - Een document maken met cURL

Ik heb al gezegd dat CouchDB een RESTful-interface gebruikt en dat de lezer met adelaarsoog zou hebben opgemerkt dat Futon dit via de console in Firebug heeft gebruikt. Als dat niet het geval is, laten we dit bewijzen door een document in te voegen met cURL via de terminal.

Eerste, laten we een JSON-document maken met de onderstaande inhoud en opslaan op de desktop die het bestand aanroept person.json.

 "voornaam": "Gavin", "achternaam": "Cooper", "type": "persoon"

volgende, open de terminal en voer uit cd ~ / Desktop / u in de juiste map plaatsen en vervolgens de invoeging uitvoeren met curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @ person.json -H "Inhoudstype: toepassing / json". CouchDB zou een JSON-document moeten hebben geretourneerd zoals hieronder.

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

Dit is het ID en revisienummer van het ingevoegde document. CouchDB volgt de RESTful-conventie en dus:

  • POST - creëert een nieuw record
  • KRIJGEN - leest records
  • LEGGEN - werkt een record bij
  • DELETE - verwijdert een record

Stap 7 - Alle documenten bekijken

We kunnen onze insert verder verifiëren door alle documenten in ons te bekijken mycouchshop database door uitvoering curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs.


Stap 8 - Een eenvoudige kaartfunctie maken

Het bekijken van alle documenten is praktisch gezien nutteloos. Wat is meer ideaal is om alle productdocumenten te bekijken. Volg de onderstaande stappen om dit te bereiken:

  • Klik binnen Futon op het dropdown-menu en selecteer "Tijdelijke weergave".
  • Dit is de kaartredacteur binnen Futon. Kopieer de onderstaande code naar de kaartfunctie.
     functie (doc) if (doc.type === "product" && doc.name) uitstoten (doc.name, doc); 
  • Klik op Uitvoeren en u zou het enige product moeten zien dat we eerder hebben toegevoegd.
  • Ga je gang en maak deze visie blijvend door het op te slaan.

Nadat u deze eenvoudige kaartfunctie hebt gemaakt, kunnen we nu deze weergave opvragen en de inhoud ervan via HTTP bekijken met behulp van de volgende opdracht curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products.

Een klein ding om op te merken is hoe we de ID en de revisie van het document standaard krijgen.


Stap 9 - Een verlaging uitvoeren

Om een ​​nuttige korting uit te voeren, voegen we een ander product toe aan onze database en voegen we een prijskenmerk toe met de waarde van 1,75 aan ons eerste product.

 "naam": "Mijn product", "prijs": 2.99, "type": "product"

Voor onze nieuwe weergave zullen we zowel een reductie als een kaart opnemen. Eerst moeten we toewijzen zoals hieronder gedefinieerd.

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

De bovenstaande kaartfunctie controleert eenvoudig of het ingevoerde document een product is en dat het een prijs heeft. Als aan deze voorwaarden is voldaan, wordt de prijs van het product uitgestoten. De reductiefunctie is hieronder.

 functie (sleutels, prijzen) returnsom (prijzen); 

De bovenstaande functie neemt de prijzen en retourneert de som met behulp van een van de ingebouwde functies voor reduceren van CouchDB. Zorg ervoor dat u de optie voor verkleinen in de rechterbovenhoek van de resultatentabel aanvinkt, omdat u anders misschien de resultaten van de verkleining niet kunt zien. U moet mogelijk een vernieuwing op de pagina uitvoeren om de optie voor verkleinen te bekijken


Conclusie

In deze zelfstudie hebben we een korte maar gerichte blik op CouchDB gezet. We zagen de potentiële kracht van CouchDB en hoe gemakkelijk het is om te beginnen. Ik weet zeker dat je op dit moment genoeg vragen hebt, dus voel je vrij om hieronder te klokken. Heel erg bedankt voor het lezen!