CouchDB
 sql >> Datenbank >  >> NoSQL >> CouchDB

Erste Schritte mit CouchDB

NoSQL war eines der meistdiskutierten Themen der letzten Monate. Dieses Tutorial führt Sie in CouchDB, eine NoSQL-Implementierung, ein und zeigt Ihnen, wie Sie mit der Plattform beginnen.

Was ist NoSQL?

NoSQL ist schemafrei – Sie müssen die Struktur nicht im Voraus festlegen.

NoSQL [nicht nur SQL ] ist eine Bewegung hin zu Dokumentenspeichern, die das relationale Modell nicht verwenden. Der grundlegende Paradigmenwechsel liegt in der Art und Weise, wie sie Daten speichern. Wenn Sie beispielsweise Daten zu einer Rechnung speichern müssen, müssen Sie diese Informationen in RDBMS in Tabellen destillieren und dann eine serverseitige Sprache verwenden, um diese Daten wieder in reale Objekte umzuwandeln. Auf der anderen Seite speichern Sie in NoSQL nur die Rechnung. NoSQL ist schemafrei, was bedeutet, dass Sie Ihre Tabellen und Strukturen nicht im Voraus entwerfen müssen – Sie können einfach damit beginnen, neue Werte zu speichern.

In Fortsetzung des Rechnungsbeispiels können einige Rechnungen eine Umsatzsteuer-Identifikationsnummer enthalten, andere nicht. In einem RDBMS müssten Sie Ihrer Tabelle mitteilen, dass sie zuerst eine Umsatzsteuer-Identifikationsnummer akzeptieren und dann möglicherweise null sein könnte. In NoSQL können Sie jedoch nur Rechnungen mit oder ohne Umsatzsteuer-Identifikationsnummer speichern – es gibt kein Schema. Denken Sie daran, dass NoSQL keine Wunderwaffe ist. Wenn Ihre Daten wirklich relational sind, wäre es die richtige Wahl, bei Ihrem RDBMS zu bleiben.

NoSQL-Datenbanken abfragen

MapReducing hat Vorteile gegenüber SQL-Abfragen, da die Map/Reduce-Aufgabe auf mehrere Knoten verteilt werden kann, was in RDBMS nicht möglich ist.

NoSQL-Datenbanken verwenden map/reduce, um die Datenbank abzufragen und zu indizieren. In RDBMS führen Sie eine Abfrage aus, die mehrere Tabellen miteinander verbindet, um zunächst einen Datenpool zu erstellen, und dann wird die Abfrage ausgeführt, um eine Ergebnismenge zu erstellen, eine Teilmenge der Gesamtdaten. In NoSQL verwenden Sie map/reduce, um eine „Ansicht“ (ähnlich einer Ergebnismenge) zu erstellen. Diese Ansicht ist eine Teilmenge der Gesamtdaten.

Map extrahiert im Wesentlichen Daten und reduziert die Datenaggregation. Je vertrauter Sie mit RDBMS sind, desto schwieriger wird es, Map/Reduce zu verstehen. MapReducing hat Vorteile gegenüber SQL-Abfragen, da die Map/Reduce-Aufgabe auf mehrere Knoten verteilt werden kann, was in RDBMS nicht möglich ist. Das Hinzufügen eines neuen Datensatzes zur Datenbank bedeutet nicht immer, dass die Map/Reduce-Aufgabe komplett neu ausgeführt wird.

Wir stellen CouchDB vor

Ein paar Fakten über CouchDB, die Sie wissen sollten:

  • CouchDB ist eine dokumentenorientierte JSON-Datenbank, die in Erlang geschrieben ist.
  • Es handelt sich um eine hochkonkurrente Datenbank, die so konzipiert ist, dass sie problemlos horizontal, auf zahlreichen Geräten replizierbar und fehlertolerant ist.
  • Es ist Teil der NoSQL-Generation von Datenbanken.
  • Es ist ein Open-Source-Projekt der Apache Foundation.
  • Es ermöglicht Anwendungen, JSON-Dokumente über seine RESTful-Schnittstelle zu speichern.
  • Es verwendet map/reduce, um die Datenbank zu indizieren und abzufragen.

Hauptvorteile von CouchDB

  • JSON-Dokumente - Alles, was in CouchDB gespeichert ist, läuft auf ein JSON-Dokument hinaus.
  • RESTful-Schnittstelle - Von der Erstellung über die Replikation bis hin zum Einfügen von Daten kann jede Verwaltungs- und Datenaufgabe in CouchDB über HTTP erledigt werden.
  • N-Master-Replikation - Sie können eine unbegrenzte Anzahl von "Mastern" verwenden, was zu einigen sehr interessanten Replikationstopologien führt.
  • Offline entwickelt - CouchDB kann auf Geräte (wie Android-Telefone) replizieren, die offline gehen können, und die Datensynchronisierung für Sie übernehmen, wenn das Gerät wieder online ist.
  • Replikationsfilter - Sie können genau die Daten filtern, die Sie auf verschiedene Knoten replizieren möchten.

Alles zusammenfügen

CouchDB ist eine Datenbank, die entwickelt wurde, um im Internet von heute zu laufen.

Mit CouchDB können Sie eine clientseitige Anwendung schreiben, die direkt mit der Couch kommuniziert, ohne dass eine serverseitige Mittelschicht erforderlich ist, wodurch die Entwicklungszeit erheblich verkürzt wird. Mit CouchDB können Sie die Nachfrage problemlos bewältigen, indem Sie problemlos weitere Replikationsknoten hinzufügen. CouchDB ermöglicht es Ihnen, die Datenbank auf Ihren Client zu replizieren und mit Filtern können Sie sogar die Daten dieses bestimmten Benutzers replizieren.

Die lokale Speicherung der Datenbank bedeutet, dass Ihre clientseitige Anwendung nahezu ohne Latenz ausgeführt werden kann. CouchDB übernimmt für Sie die Replikation in die Cloud. Ihre Benutzer können auf ihre Rechnungen auf ihrem Mobiltelefon zugreifen und Änderungen ohne merkliche Latenz vornehmen, während sie offline sind. Wenn eine Verbindung vorhanden und nutzbar ist, repliziert CouchDB diese Änderungen automatisch in Ihre Cloud-CouchDB.

CouchDB ist eine Datenbank, die entwickelt wurde, um im Internet von heute für die heutigen Desktop-ähnlichen Anwendungen und die angeschlossenen Geräte, über die wir auf das Internet zugreifen, zu laufen.

Schritt 1 - CouchDB installieren

Der einfachste Weg, CouchDB auf Ihrem System zum Laufen zu bringen, besteht darin, zu CouchOne zu gehen und eine CouchDB-Distribution für Ihr Betriebssystem herunterzuladen – in meinem Fall OSX. Laden Sie die ZIP-Datei herunter, extrahieren Sie sie und legen Sie CouchDBX in meinem Anwendungsordner ab (Anweisungen für andere Betriebssysteme auf CouchOne).

Öffnen Sie schließlich CouchDBX.

Schritt 2 - Willkommen bei Futon

Nachdem CouchDB gestartet wurde, sollten Sie das Futon-Bedienfeld in der CouchDBX-Anwendung sehen. Falls dies nicht möglich ist, können Sie über Ihren Browser auf Futon zugreifen. Wenn wir uns das Protokoll ansehen, sagt uns CouchDBX, dass CouchDB unter http://127.0.0.1:5984/ gestartet wurde (kann auf Ihrem System anders sein). Öffnen Sie einen Browser und gehen Sie zu http://127.0.0.1:5984/_utils/ und du solltest Futon sehen.

Im weiteren Verlauf dieses Tutorials werde ich Futon in Firefox verwenden. Ich habe auch Firebug und die Konsolenansicht geöffnet, um alle HTTP-Anforderungen zu sehen, die Futon hinter den Kulissen sendet. Dies ist nützlich, da Ihre Anwendung alles tun kann, was Futon tut. Lassen Sie uns fortfahren und eine Datenbank namens mycouchshop erstellen .

CouchDB jQuery-Plugin

Futon verwendet tatsächlich ein jQuery-Plugin, um mit CouchDB zu interagieren. Sie können dieses Plugin unter http://127.0.0.1:5984/_utils/script/jquery.couch.js anzeigen (beachten Sie, dass Ihr Port möglicherweise anders ist). Dies ist ein großartiges Beispiel für die Interaktion mit CouchDB.

Schritt 3 - Benutzer in CouchDB

CouchDB ist standardmäßig vollständig offen und gibt jedem Benutzer Administratorrechte für die Instanz und alle ihre Datenbanken. Das ist großartig für die Entwicklung, aber offensichtlich schlecht für die Produktion. Lassen Sie uns fortfahren und einen Administrator einrichten. Unten rechts sehen Sie "Willkommen bei der Admin-Party! Jeder ist Admin! Beheben Sie das".

Fahren Sie fort und klicken Sie auf Problem beheben und geben Sie sich einen Benutzernamen und ein Passwort. Dadurch wird ein Administratorkonto erstellt und anonymen Benutzern Lese- und Schreibzugriff auf alle Datenbanken gewährt, jedoch keine Konfigurationsrechte.

Mehr zu Benutzern

In CouchDB wäre es unklug, einen einzelnen Superuser zu erstellen und diesen Benutzer das gesamte Lesen/Schreiben erledigen zu lassen.

Benutzer in CouchDB können anfangs etwas verwirrend sein, besonders wenn Sie daran gewöhnt sind, einen einzelnen Benutzer für Ihre gesamte Anwendung zu erstellen und dann Benutzer selbst in einer Benutzertabelle (nicht der MySQL-Benutzertabelle) zu verwalten. In CouchDB wäre es unklug, einen einzelnen Superuser zu erstellen und diesen Benutzer das gesamte Lesen/Schreiben erledigen zu lassen, denn wenn Ihre App clientseitig ist, werden die Anmeldeinformationen dieses Superusers in Ihrem JavaScript-Quellcode deutlich sichtbar sein.

CouchDB hat die Erstellung und Authentifizierung von Benutzern integriert. Sie können Benutzer mit dem jQuery-Plugin erstellen, indem Sie $.couch.signup() verwenden . Diese werden im Wesentlichen die Benutzer Ihres Systems. Benutzer sind wie alles andere nur JSON-Dokumente, sodass Sie beliebige zusätzliche Attribute wie z. B. E-Mail speichern können. Sie können dann Gruppen innerhalb von CouchDB verwenden, um zu steuern, auf welche Dokumente jeder Benutzer Schreibzugriff hat. Beispielsweise können Sie für diesen Benutzer eine Datenbank erstellen, in die er schreiben kann, und ihn dann bei Bedarf zu einer Gruppe mit Lesezugriff auf die anderen Datenbanken hinzufügen.

Schritt 4 – Erstellen eines Produktdokuments

Lassen Sie uns nun unser erstes Dokument mit Futon in den folgenden Schritten erstellen:

  1. Öffnen Sie den mycouchshop Datenbank.
  2. Klicken Sie auf "Neues Dokument".
  3. Klicken Sie auf „Feld hinzufügen“, um mit dem Hinzufügen von Daten zum JSON-Dokument zu beginnen. Beachten Sie, wie eine ID für Sie vorausgefüllt wird, ich würde dringend raten, dies nicht zu ändern. Fügen Sie den Schlüssel "name" mit dem Wert "Nettuts CouchDB Tutorial One" hinzu.
  4. Stellen Sie sicher, dass Sie auf das Häkchen neben jedem Attribut klicken, um es zu speichern.
  5. Klicken Sie auf "Dokument speichern".

Gehen Sie eine Ebene höher, zurück zur Datenbank, und Sie sollten ein Dokument sehen, das mit der vorherigen ID als Schlüssel und einem Wert aufgelistet ist, der mit {rev: beginnt . Dies ist das JSON-Dokument, das Sie gerade erstellt haben.

Schritt 5 – Aktualisieren eines Dokuments

CouchDB ist eine Append-Only-Datenbank – neue Updates werden an die Datenbank angehängt und überschreiben nicht die alte Version. Bei jeder neuen Aktualisierung eines JSON-Dokuments mit einer bereits vorhandenen ID wird eine neue Revision hinzugefügt. Dafür steht der automatisch eingefügte Revisionsschlüssel. Führen Sie die folgenden Schritte aus, um dies in Aktion zu sehen:

  • Anzeigen des Inhalts von mycouchshop Datenbank, klicken Sie auf den einzigen sichtbaren Datensatz.
  • Fügen Sie ein weiteres Attribut mit dem Schlüssel "Typ" und dem Wert "Produkt" hinzu.
  • Klicken Sie auf "Dokument speichern".

Nachdem Sie auf Speichern geklickt haben, sollte ein neuer Revisionsschlüssel beginnend mit der Nummer 2 sichtbar sein. Gehen Sie eine Ebene zurück zum mycouchshop Datenbankansicht sehen Sie immer noch nur ein Dokument, dies ist die neueste Überarbeitung unseres Produktdokuments.

Überarbeitungen

Obwohl CouchDB intern Revisionen verwendet, versuchen Sie, sich nicht zu sehr darauf zu stützen. Die Revisionen können ganz einfach durch Futon gereinigt werden und es ist nicht dafür ausgelegt, als Revisionskontrollsystem verwendet zu werden. CouchDB verwendet die Revisionen als Teil seiner Replikationsfunktionalität.

Schritt 6 – Erstellen eines Dokuments mit cURL

Ich habe bereits erwähnt, dass CouchDB eine RESTful-Schnittstelle verwendet, und der aufmerksame Leser hätte bemerkt, dass Futon dies über die Konsole in Firebug verwendet. Falls Sie dies nicht getan haben, lassen Sie uns dies beweisen, indem Sie ein Dokument mit cURL über das Terminal einfügen.

Zuerst , erstellen wir ein JSON-Dokument mit den folgenden Inhalten und speichern es auf dem Desktop, indem wir die Datei person.json aufrufen .

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

Weiter , öffnen Sie das Terminal und führen Sie cd ~/Desktop/ aus Setzen Sie sich in das richtige Verzeichnis und führen Sie dann die Einfügung mit curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @person.json -H "Content-Type: application/json" . CouchDB sollte ein JSON-Dokument ähnlich dem untenstehenden zurückgegeben haben.

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

Dies ist die ID und Revisionsnummer des eingefügten Dokuments. CouchDB folgt der RESTful-Konvention und somit:

  • POSTEN - erstellt einen neuen Datensatz
  • ERHALTEN - liest Aufzeichnungen
  • PUT - aktualisiert einen Datensatz
  • LÖSCHEN - löscht einen Datensatz

Schritt 7 – Alle Dokumente anzeigen

Wir können unsere Beilage weiter überprüfen, indem wir alle Dokumente in unserem mycouchshop einsehen Datenbank durch Ausführen von curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs .

Schritt 8 – Erstellen einer einfachen Kartenfunktion

Das Sichten aller Dokumente ist in der Praxis ziemlich nutzlos. Idealer wäre es, alle Produktdokumente einzusehen. Gehen Sie dazu wie folgt vor:

  • Klicken Sie in Futon auf das Dropdown-Menü "Ansicht" und wählen Sie "Temporäre Ansicht".
  • Dies ist der Map-Reduce-Editor in Futon. Kopieren Sie den folgenden Code in die Map-Funktion.
    			function (doc) {
    				if (doc.type === "product" && doc.name) {
    					emit(doc.name, doc);
    				}
    			}
  • Klicken Sie auf Ausführen und Sie sollten das einzelne Produkt sehen, das wir zuvor hinzugefügt haben.
  • Fahren Sie fort und machen Sie diese Ansicht dauerhaft, indem Sie sie speichern.

Nachdem wir diese einfache Kartenfunktion erstellt haben, können wir nun diese Ansicht anfordern und ihren Inhalt über HTTP mit dem folgenden Befehl anzeigen:curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products .

Eine kleine Sache, die zu beachten ist, ist, wie wir standardmäßig die ID und Revision des Dokuments erhalten.

Schritt 9 - Durchführen einer Reduzierung

Um eine sinnvolle Reduzierung durchzuführen, fügen wir unserer Datenbank ein weiteres Produkt hinzu und fügen unserem ersten Produkt ein Preisattribut mit dem Wert 1,75 hinzu.

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

Für unsere neue Ansicht werden wir sowohl eine Reduzierung als auch eine Karte hinzufügen. Zuerst müssen wir wie unten definiert zuordnen.

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

Die obige Kartenfunktion überprüft einfach, ob das eingegebene Dokument ein Produkt ist und ob es einen Preis hat. Wenn diese Bedingungen erfüllt sind, wird der Produktpreis ausgegeben. Die Reduzierungsfunktion ist unten.

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

Die obige Funktion nimmt die Preise und gibt die Summe zurück, indem sie eine der eingebauten Reduce-Funktionen von CouchDB verwendet. Stellen Sie sicher, dass Sie die Reduzierungsoption oben rechts in der Ergebnistabelle aktivieren, da Sie sonst möglicherweise die Ergebnisse der Reduzierung nicht sehen können. Möglicherweise müssen Sie die Seite hart aktualisieren, um die Option zum Reduzieren anzuzeigen