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.
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.
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.
Een paar feiten over CouchDB die u moet weten:
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.
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.
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
.
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.
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.
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.
Laten we nu ons eerste document met behulp van Futon maken door de volgende stappen:
mycouchshop
databank.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.
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:
mycouchshop
database, klik op het enige record zichtbaar.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.
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.
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:
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
.
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:
functie (doc) if (doc.type === "product" && doc.name) uitstoten (doc.name, doc);
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.
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
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!