sql >> Databasteknik >  >> NoSQL >> CouchDB

Komma igång med CouchDB

NoSQL har varit ett av de mest omtalade ämnena under de senaste månaderna. Denna handledning kommer att introducera dig till CouchDB, en NoSQL-implementering och lära dig hur du kommer igång med plattformen.

Vad är NoSQL?

NoSQL är schemafritt -- du behöver inte bestämma strukturen i förväg.

NoSQL [inte bara SQL ] är en rörelse mot dokumentlager som inte använder sig av den relationella modellen. Det grundläggande paradigmskiftet är hur de lagrar data. Till exempel, när du skulle behöva lagra data om en faktura, i RDBMS skulle du behöva destillera denna information till tabeller och sedan använda ett serverspråk för att omvandla denna data tillbaka till verkliga objekt. Å andra sidan, i NoSQL lagrar du bara fakturan. NoSQL är schemafritt, vilket innebär att du inte behöver designa dina tabeller och strukturera i förväg - du kan helt enkelt börja lagra nya värden.

Om vi ​​fortsätter med fakturaexemplet kan vissa fakturor innehålla ett momsnummer, andra kanske inte. I en RDBMS måste du säga till ditt bord att först acceptera ett momsnummer och sedan att det eventuellt kan vara null. I NoSQL kan du dock bara lagra fakturor med eller utan momsnummer -- det finns inget schema. Tänk på att NoSQL inte är en silverkula. Om din data verkligen är relationell, skulle det vara rätt val att hålla fast vid din RDBMS.

Fråga NoSQL-databaser

MapReducing har fördelar jämfört med SQL-frågor eftersom kart-/reduceringsuppgiften kan distribueras mellan flera noder, något som inte är möjligt i RDBMS.

NoSQL-databaser använder map/reduce för att fråga och indexera databasen. I RDBMS kör du en fråga som sammanfogar flera tabeller för att först skapa en datapool och sedan körs frågan och skapa en resultatuppsättning, en delmängd av den övergripande datan. I NoSQL använder du map/reduce för att skapa en "vy" (liknande en resultatuppsättning) denna vy är en delmängd av den övergripande datan.

Karta är i huvudsak att extrahera data och minska dataaggregering. Ju mer bekant du är med RDBMS, desto svårare blir det att greppa kartan/förminska. MapReducing-fördelar jämfört med SQL-frågor eftersom kart-/reduceringsuppgiften kan fördelas mellan flera noder, något som inte är möjligt i RDBMS. Att lägga till en ny post i databasen innebär inte alltid att kart-/reduceringsuppgiften körs om helt.

Vi presenterar CouchDB

Några fakta om CouchDB som du bör känna till:

  • CouchDB är en JSON-dokumentorienterad databas skriven i Erlang.
  • Det är en mycket samtidig databas som är utformad för att vara lätt replikerbar, horisontellt, över flera enheter och vara feltolerant.
  • Det är en del av NoSQL-generationen av databaser.
  • Det är ett Apache Foundation-projekt med öppen källkod.
  • Det tillåter applikationer att lagra JSON-dokument via dess RESTful-gränssnitt.
  • Den använder map/reduce för att indexera och fråga databasen.

Stora fördelar med CouchDB

  • JSON-dokument - Allt som lagras i CouchDB kokar ner till ett JSON-dokument.
  • ROLIGT gränssnitt - Från skapande till replikering till datainfogning, alla hanterings- och datauppgifter i CouchDB kan göras via HTTP.
  • N-Master-replikering - Du kan använda ett obegränsat antal "masters", vilket ger några mycket intressanta replikeringstopologier.
  • Byggad för offline - CouchDB kan replikera till enheter (som Android-telefoner) som kan gå offline och hantera datasynkronisering åt dig när enheten är online igen.
  • Replikeringsfilter - Du kan filtrera exakt den data du vill replikera till olika noder.

Lägg ihop allt

CouchDB är en databas designad för att köras på dagens internet.

CouchDB låter dig skriva en applikation på klientsidan som talar direkt till soffan utan behov av ett mellanlager på serversidan, vilket avsevärt minskar utvecklingstiden. Med CouchDB kan du enkelt hantera efterfrågan genom att lägga till fler replikeringsnoder med lätthet. CouchDB låter dig replikera databasen till din klient och med filter kan du till och med replikera den specifika användarens data.

Att ha databasen lagrad lokalt innebär att din applikation på klientsidan kan köras nästan utan latens. CouchDB kommer att hantera replikeringen till molnet åt dig. Dina användare kunde komma åt sina fakturor på sin mobiltelefon och göra ändringar utan märkbar fördröjning, allt samtidigt som de var offline. När en anslutning är närvarande och användbar, kommer CouchDB automatiskt att replikera dessa ändringar till ditt moln CouchDB.

CouchDB är en databas designad för att köras på dagens internet för dagens skrivbordsliknande applikationer och de uppkopplade enheterna genom vilka vi får tillgång till internet.

Steg 1 - Installera CouchDB

Det enklaste sättet att få CouchDB igång på ditt system är att gå till CouchOne och ladda ner en CouchDB-distribution för ditt operativsystem -- OSX i mitt fall. Ladda ner zip-filen, extrahera den och släpp CouchDBX i min programmapp (instruktioner för andra operativsystem på CouchOne).

Öppna slutligen CouchDBX.

Steg 2 - Välkommen till Futon

Efter att CouchDB har startat bör du se Futon-kontrollpanelen i CouchDBX-applikationen. Om du inte kan, kan du komma åt Futon via din webbläsare. När vi tittar på loggen berättar CouchDBX att CouchDB startades på http://127.0.0.1:5984/ (kan vara annorlunda på ditt system). Öppna en webbläsare och gå till http://127.0.0.1:5984/_utils/ och du borde se Futon.

Under resten av denna handledning kommer jag att använda Futon i Firefox. Jag kommer också att ha Firebug och konsolvyn öppen för att se alla HTTP-förfrågningar som Futon skickar bakom kulisserna. Detta är användbart eftersom din applikation kan göra allt Futon gör. Låt oss gå vidare och skapa en databas som heter mycouchshop .

CouchDB jQuery Plugin

Futon använder faktiskt en jQuery-plugin för att interagera med CouchDB. Du kan se det insticksprogrammet på http://127.0.0.1:5984/_utils/script/jquery.couch.js (tänk på att din port kan vara annorlunda). Detta ger dig ett bra exempel på att interagera med CouchDB.

Steg 3 - Användare i CouchDB

CouchDB, som standard, är helt öppen, vilket ger varje användare administratörsrättigheter till instansen och alla dess databaser. Detta är bra för utveckling men uppenbarligen dåligt för produktionen. Låt oss gå vidare och konfigurera en administratör. Längst ner till höger ser du "Välkommen till Admin Party! Alla är admin! Fix this".

Fortsätt och klicka på åtgärda detta och ge dig själv ett användarnamn och lösenord. Detta skapar ett administratörskonto och ger anonyma användare tillgång till läs- och skrivoperationer på alla databaser, men inga konfigurationsprivilegier.

Mer om användare

I CouchDB skulle det vara oklokt att skapa en enda superanvändare och låta den användaren göra allt läs/skriv.

Användare i CouchDB kan vara lite förvirrande att förstå initialt, speciellt om du är van vid att skapa en enda användare för hela din applikation och sedan hantera användare själv inom en användartabell (inte MySQL-användartabellen). I CouchDB skulle det vara oklokt att skapa en enda superanvändare och låta den användaren göra allt som läser/skriver, för om din app är på klientsidan kommer denna superanvändares referenser att vara synliga i din JavaScript-källkod.

CouchDB har användarskapande och autentisering inbyggt. Du kan skapa användare med jQuery-plugin med $.couch.signup() . Dessa blir i huvudsak användarna av ditt system. Användare är bara JSON-dokument som allt annat så att du kan lagra eventuella ytterligare attribut du vill som e-post till exempel. Du kan sedan använda grupper inom CouchDB för att kontrollera vilka dokument varje användare har skrivåtkomst till. Du kan till exempel skapa en databas för den användaren som de kan skriva till och sedan lägga till dem i en grupp med läsbehörighet till de andra databaserna efter behov.

Steg 4 - Skapa ett produktdokument

Låt oss nu skapa vårt första dokument med Futon genom följande steg:

  1. Öppna mycouchshop databas.
  2. Klicka på "Nytt dokument".
  3. Klicka på "Lägg till fält" för att börja lägga till data i JSON-dokumentet. Lägg märke till hur ett ID är förifyllt åt dig, jag skulle starkt råda dig att inte ändra detta. Lägg till nyckel "name" med värdet "Nettuts CouchDB Tutorial One".
  4. Se till att du klickar på bocken bredvid varje attribut för att spara det.
  5. Klicka på "Spara dokument".

Gå upp en nivå, tillbaka till databasen och du bör se ett dokument listat med föregående ID som nyckel och ett värde som börjar med{rev: . Det här är JSON-dokumentet du just skapade.

Steg 5 - Uppdatera ett dokument

CouchDB är en endast tilläggsdatabas -- nya uppdateringar läggs till i databasen och skriver inte över den gamla versionen. Varje ny uppdatering av ett JSON-dokument med ett redan existerande ID kommer att lägga till en ny version. Detta är vad den automatiskt infogade revisionsnyckeln betyder. Följ stegen nedan för att se hur detta fungerar:

  • Visa innehållet i mycouchshop databas, klicka på den enda posten som är synlig.
  • Lägg till ytterligare ett attribut med nyckeln "type" och värdet "product".
  • Klicka på "Spara dokument".

Efter att ha tryckt på spara bör en ny versionsnyckel vara synlig med siffran 2. Går tillbaka en nivå till mycouchshop databasvy, kommer du fortfarande att se bara ett dokument, detta är den senaste versionen av vårt produktdokument.

Revisioner

Medan CouchDB använder revisioner internt, försök att inte luta dig för mycket på det. Revisionerna kan rengöras genom Futon ganska enkelt och det är inte designat för att användas som ett revisionskontrollsystem. CouchDB använder revisionerna som en del av sin replikeringsfunktion.

Steg 6 - Skapa ett dokument med hjälp av cURL

Jag har redan nämnt att CouchDB använder ett RESTful-gränssnitt och eagle eyed-läsaren skulle ha märkt att Futon använder detta via konsolen i Firebug. Om du inte gjorde det, låt oss bevisa detta genom att infoga ett dokument med hjälp av cURL via terminalen.

Först , låt oss skapa ett JSON-dokument med innehållet nedan och spara det på skrivbordet och anropa filen person.json .

	{
		"forename":	"Gavin",
		"surname":	"Cooper",
		"type":		"person"
	}

Nästa , öppna terminalen och kör cd ~/Desktop/ placerar dig i rätt katalog och utför sedan infogningen med curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type:application/json" . CouchDB borde ha returnerat ett JSON-dokument som liknar det nedan.

{"ok":true,"id":"c6e2f3d7f8d0c91ce7938e9c0800131c","rev":"1-abadd48a09c270047658dbc38dc8a892"}

Detta är ID och revisionsnummer för det infogade dokumentet. CouchDB följer RESTful-konventionen och därmed:

  • LÄGG IN - skapar en ny post
  • GET - läser poster
  • PUT - uppdaterar en post
  • RADERA - raderar en post

Steg 7 - Visa alla dokument

Vi kan verifiera vår bilaga ytterligare genom att se alla dokument i vår mycouchshop databas genom att köra curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs .

Steg 8 - Skapa en enkel kartfunktion

Att titta på alla dokument är ganska värdelöst rent praktiskt. Vad som skulle vara mer idealiskt är att se alla produktdokument. Följ stegen nedan för att uppnå detta:

  • Inom Futon, klicka på rullgardinsmenyn för vy och välj "Tillfällig vy".
  • Detta är kartminskningsredigeraren i Futon. Kopiera koden nedan till kartfunktionen.
    			function (doc) {
    				if (doc.type === "product" && doc.name) {
    					emit(doc.name, doc);
    				}
    			}
  • Klicka på Kör så bör du se den enda produkt som vi lade till tidigare.
  • Fortsätt och gör den här vyn permanent genom att spara den.

Efter att ha skapat denna enkla kartfunktion kan vi nu begära denna vy och se dess innehåll över HTTP med följande kommando curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products .

En liten sak att lägga märke till är hur vi får dokumentets ID och revision som standard.

Steg 9 - Utföra en reduktion

För att göra en användbar minskning, låt oss lägga till ytterligare en produkt i vår databas och lägga till ett prisattribut med värdet 1,75 till vår första produkt.

	{
		"name":		"My Product",
		"price":	2.99,
		"type":		"product"
	}

För vår nya vy kommer vi att inkludera en reducering samt en karta. Först måste vi kartlägga enligt nedan.

	function (doc) {
		if (doc.type === "product" && doc.price) {
			emit(doc.id, doc.price);
		}
	}

Ovanstående kartfunktion kontrollerar helt enkelt om det inmatade dokumentet är en produkt och att det har ett pris. Om dessa villkor är uppfyllda släpps produktpriset ut. Minska funktionen finns nedan.

function (keys, prices) {
	return sum(prices);
}

Ovanstående funktion tar priserna och returnerar summan med en av CouchDB:s inbyggda reduceringsfunktioner. Se till att du markerar minskningsalternativet uppe till höger i resultattabellen eftersom du annars kanske inte kan se resultatet av minskningen. Du kan behöva göra en hårduppdatering på sidan för att se alternativet för att minska


  1. Beräkna medianen i MongoDB-aggregationsramverket

  2. Meteor - collection.find() returnerar alltid alla fält

  3. viloläge andra nivåns cache med Redis - kommer det att förbättra prestandan?

  4. Meteor publicera/prenumerera strategier för unika samlingar på klientsidan