NoSQL war in den letzten Monaten eines der meist besprochenen Themen. In diesem Lernprogramm werden Sie mit CouchDB, einer NoSQL-Implementierung, vertraut gemacht. Außerdem erfahren Sie, wie Sie mit der Plattform beginnen.
NoSQL ist schemafrei - Sie müssen sich nicht für die Struktur entscheiden.
NoSQL [nicht nur SQL] ist eine Bewegung in Richtung Dokumentenspeicher, die das relationale Modell nicht verwenden. Der grundlegende Paradigmenwechsel besteht darin, wie sie Daten speichern. Wenn Sie beispielsweise Daten zu einer Rechnung speichern müssen, müssen Sie diese Informationen in RDBMS in Tabellen zusammenfassen 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. Das bedeutet, dass Sie Ihre Tabellen nicht selbst entwerfen und strukturieren müssen - Sie können einfach neue Werte speichern.
Um das Rechnungsbeispiel fortzusetzen, 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 muss und dass diese möglicherweise null sein kann. In NoSQL können Sie Rechnungen jedoch einfach 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 eine gute Wahl, wenn Sie sich an Ihr RDBMS halten.
MapReducing bietet gegenüber SQL-Abfragen Vorteile, da die Map / Reduction-Task 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. Anschließend wird die Abfrage ausgeführt und eine Ergebnismenge erstellt, eine Teilmenge der Gesamtdaten. In NoSQL verwenden Sie map / verkleinern, um eine "Ansicht" (ähnlich einer Ergebnismenge) zu erstellen. Diese Ansicht ist eine Teilmenge der Gesamtdaten.
Die Karte extrahiert im Wesentlichen Daten und reduziert die Datenaggregation. Je vertrauter Sie mit RDBMS sind, desto schwieriger wird das Erfassen / Verkleinern. MapReduzierung von Vorteilen gegenüber SQL-Abfragen, da die Map / Reduction-Task auf mehrere Knoten verteilt werden kann, was in RDBMS nicht möglich ist. Das Hinzufügen eines neuen Datensatzes zur Datenbank stellt nicht immer die Zuordnung der Map dar.
Ein paar Fakten zu CouchDB, die Sie kennen sollten:
CouchDB ist eine Datenbank, die für das heutige Internet entwickelt wurde.
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 reduziert wird. Mit CouchDB können Sie den Bedarf problemlos handhaben, indem Sie problemlos weitere Replikationsknoten hinzufügen. Mit CouchDB können Sie die Datenbank auf Ihren Client replizieren. Mit Filtern können Sie sogar die Daten dieses bestimmten Benutzers replizieren.
Wenn die Datenbank lokal gespeichert ist, kann Ihre clientseitige Anwendung nahezu ohne Latenz ausgeführt werden. CouchDB übernimmt für Sie die Replikation in die Cloud. Ihre Benutzer können über ihr Mobiltelefon auf ihre Rechnungen zugreifen und Änderungen ohne erkennbare Wartezeiten vornehmen, wenn sie offline sind. Wenn eine Verbindung vorhanden und nutzbar ist, repliziert CouchDB diese Änderungen automatisch in Ihre Cloud-CouchDB.
CouchDB ist eine Datenbank, die für heutige Desktop-ähnliche Anwendungen und die verbundenen Geräte, über die wir auf das Internet zugreifen, im heutigen Internet ausgeführt werden kann.
Die einfachste Möglichkeit, CouchDB auf Ihrem System zum Laufen zu bringen, besteht darin, zu CouchOne zu gehen und in meinem Fall eine CouchDB-Distribution für Ihr OS-OSX herunterzuladen. 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.
Nach dem Starten von CouchDB sollten Sie das Futon-Kontrollfeld in der CouchDBX-Anwendung sehen. Falls Sie dies nicht können, können Sie über Ihren Browser auf Futon zugreifen. Wenn Sie sich das Protokoll ansehen, sagt CouchDBX, dass CouchDB bereits gestartet wurde http://127.0.0.1:5984/
(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. Machen wir weiter und erstellen Sie eine Datenbank namens mycouchshop
.
Futon verwendet eigentlich ein jQuery-Plugin, um mit CouchDB zu interagieren. Sie können das Plugin unter anzeigen http://127.0.0.1:5984/_utils/script/jquery.couch.js
(Denken Sie daran, dass Ihr Hafen möglicherweise anders ist). Dies gibt Ihnen ein gutes Beispiel für die Interaktion mit CouchDB.
CouchDB ist standardmäßig vollständig geöffnet 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 einen Admin einrichten. Unten rechts sehen Sie "Willkommen bei der Admin-Party! Jeder ist Admin! Reparieren Sie dies.".
Fahren Sie fort und klicken Sie auf repariere das und gib dir einen Benutzernamen und ein Passwort. Dadurch wird ein Administratorkonto erstellt, und anonyme Benutzer haben Zugriff auf Lese- und Schreibvorgänge für alle Datenbanken, jedoch keine Konfigurationsberechtigungen.
In CouchDB wäre es unklug, einen einzigen Superbenutzer zu erstellen, der den gesamten Lese- und Schreibvorgang ausführen muss.
Benutzer in CouchDB können anfangs etwas verwirrend sein, insbesondere wenn Sie es gewohnt sind, einen einzelnen Benutzer für Ihre gesamte Anwendung zu erstellen und dann Benutzer selbst in einer Benutzertabelle zu verwalten (nicht in der MySQL-Benutzertabelle). In CouchDB wäre es nicht ratsam, einen einzigen Superbenutzer zu erstellen, der alle Lese- und Schreibvorgänge ausführen muss. Wenn Ihre App clientseitig ist, sind die Anmeldeinformationen dieses Superbenutzers in Ihrem JavaScript-Quellcode nicht zu übersehen.
In CouchDB können Benutzer erstellt und authentifiziert werden. Sie können Benutzer mit dem jQuery-Plugin erstellen $ .couch.signup ()
. Diese werden im Wesentlichen zu den Benutzern Ihres Systems. Benutzer sind wie alles andere nur JSON-Dokumente, sodass Sie beliebige zusätzliche Attribute wie E-Mail speichern können. Anschließend können Sie Gruppen in CouchDB verwenden, um zu steuern, auf welche Dokumente jeder Benutzer Schreibzugriff hat. Sie können beispielsweise eine Datenbank für diesen Benutzer erstellen, in die er schreiben kann, und diese dann einer Gruppe mit Lesezugriff auf die anderen Datenbanken hinzufügen, falls erforderlich.
Nun erstellen wir unser erstes Dokument mit Futon durch die folgenden Schritte:
mycouchshop
Datenbank.Gehen Sie eine Ebene hoch und kehren Sie zur Datenbank zurück. Sie sollten ein Dokument mit der vorherigen ID als Schlüssel und einem Wert anzeigen, der mit beginntrev:
. Dies ist das JSON-Dokument, das Sie gerade erstellt haben.
CouchDB ist nur eine Anhänge-Datenbank. Neue Aktualisierungen werden an die Datenbank angefügt und überschreiben die alte Version nicht. Bei jeder neuen Aktualisierung eines JSON-Dokuments mit einer bereits vorhandenen ID wird eine neue Version hinzugefügt. Dies ist, was der automatisch eingefügte Revisionsschlüssel bedeutet. Führen Sie die folgenden Schritte aus, um dies in Aktion zu sehen:
mycouchshop
Klicken Sie in der Datenbank auf den einzigen sichtbaren Datensatz.Nachdem Sie auf Speichern geklickt haben, sollte ein neuer Revisionsschlüssel sichtbar sein, der mit der Nummer 2 beginnt. Gehen Sie einen Schritt zurück zum mycouchshop
In der Datenbankansicht wird immer noch nur ein Dokument angezeigt. Dies ist die neueste Version unseres Produktdokuments.
Während CouchDB intern Revisionen verwendet, sollten Sie sich nicht zu sehr darauf verlassen. Die Revisionen können mit Futon problemlos gesäubert werden und sind nicht als Revisionskontrollsystem konzipiert. CouchDB verwendet die Revisionen als Teil seiner Replikationsfunktionalität.
Ich habe bereits erwähnt, dass CouchDB eine RESTful-Schnittstelle verwendet und der Eagle-Eyed-Reader hätte Futon bemerkt, der dies über die Konsole in Firebug verwendet. Falls dies nicht der Fall ist, lassen Sie uns dies durch das Einfügen eines Dokuments mit cURL über das Terminal beweisen.
Zuerst, Lassen Sie uns ein JSON-Dokument mit dem folgenden Inhalt erstellen und auf dem Desktop speichern, der die Datei aufruft person.json
.
"Vorname": "Gavin", "Nachname": "Cooper", "Typ": "Person"
Nächster, Öffnen Sie das Terminal und führen Sie es aus CD ~ / Desktop /
Sie in das richtige Verzeichnis und führen dann die Einfügung mit aus curl -X POST http://127.0.0.1:5984/mycouchshop/ -d @ person.json -H "Inhaltstyp: application / json"
. CouchDB sollte ein JSON-Dokument ähnlich dem unten stehenden zurückgegeben haben.
"ok": "true", "id": "c6e2f3d7f8d0c91ce7938e9c0800131c", "rev": "1-abadd48a09c270047658dbc38dc8a892"
Dies ist die ID und die Versionsnummer des eingefügten Dokuments. CouchDB folgt der RESTful-Konvention und somit:
Wir können unsere Beilage weiter überprüfen, indem Sie alle Dokumente in unserer einsehen mycouchshop
Datenbank durch Ausführen curl -X GET http://127.0.0.1:5984/mycouchshop/_all_docs
.
Das Anzeigen aller Dokumente ist in der Praxis ziemlich nutzlos. Idealer ist die Ansicht aller Produktdokumente. Führen Sie die folgenden Schritte aus, um dies zu erreichen:
function (doc) if (doc.type === "Produkt" && doc.name) emit (doc.name, doc);
Nachdem Sie diese einfache Kartenfunktion erstellt haben, können Sie diese Ansicht jetzt anfordern und ihren Inhalt über HTTP anzeigen, indem Sie den folgenden Befehl verwenden curl -X GET http://127.0.0.1:5984/mycouchshop/_design/products/_view/products
.
Zu bemerken ist, wie wir standardmäßig die ID und die Revision des Dokuments erhalten.
Um eine sinnvolle Reduzierung durchzuführen, fügen Sie unserer Datenbank ein weiteres Produkt hinzu und fügen Sie unserem ersten Produkt ein Preisattribut mit dem Wert 1,75 hinzu.
"name": "Mein Produkt", "Preis": 2.99, "Typ": "Produkt"
Für unsere neue Ansicht werden wir eine Verkleinerung sowie eine Karte hinzufügen. Zuerst müssen wir die unten definierte Zuordnung vornehmen.
function (doc) if (doc.type === "Produkt" && doc.price) emit (doc.id, doc.price);
Die obige Kartenfunktion prüft einfach, ob das eingegebene Dokument ein Produkt ist und einen Preis hat. Wenn diese Bedingungen erfüllt sind, wird der Produktpreis ausgegeben. Die Reduzierfunktion ist unten.
Funktion (Tasten, Preise) Gesamtsumme (Preise);
Die obige Funktion übernimmt die Preise und gibt die Summe unter Verwendung einer der in CouchDB integrierten Reduzierfunktionen zurück. Stellen Sie sicher, dass Sie die Option "Reduzieren" 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 stark aktualisieren, um die Reduzierungsoption anzuzeigen
In diesem Tutorial haben wir uns kurz und fokussiert mit CouchDB beschäftigt. Wir haben das Potenzial von CouchDB erkannt und wie einfach es ist, damit anzufangen. Ich bin mir sicher, dass Sie an diesem Punkt viele Fragen haben, also zögern Sie nicht, unten zu klingeln. Vielen Dank fürs Lesen!