Ich bin es gewohnt mit mysql zu arbeiten, aber für meine nächste Reihe von Projekten scheint CouchDB (NoSQL) der richtige Weg zu sein, im Grunde um EAV in mysql zu vermeiden und all die coolen Features zu nutzen, die es zu bieten hat. p>
Nach vielen Nachforschungen und dem Lesen von Unterlagen usw. gibt es eine Sache, die ich nicht ganz gut verstehe.
Nehmen wir an, ich hosten drei Web-Anwendungen auf meinem Server und benötigen dementsprechend drei Datenbanken. Zum Beispiel ist ein Webshop mit Produkt- und Rechnungstabellen, einer ist ein Weblog mit Artikel- und Kommentartabellen und ein anderer ist ein webbasiertes Spiel mit Spielstatistiktabellen (Vereinfachung natürlich).
Also hosten wir mehrere Sites auf einer mysql-Installation, und jede Anwendung, die ich auf meinem Server laufe, erhält eine eigene Datenbank mit Tabellen, Feldern und Inhalt.
Nun, mit CouchDb möchte ich genau dasselbe machen. Das Problem scheint zu sein, dass das Erstellen einer Datenbank in CouchDb dem Erstellen einer Tabelle in mysql ähnlicher ist. I.e. Ich erstelle Datenbanken mit dem Namen "Kommentare", "Artikel" usw. für mein Weblog und ich erstelle ein Dokument pro Artikel oder ein Dokument pro Kommentar.
Meine Frage ist also: Wie kann ich meine Daten von mehreren Web-Anwendungen auf einer CouchDB-Installation trennen?
Ich denke, ich tue etwas grundsätzlich falsch, aber hoffentlich kann einer von euch mir helfen, auf dem richtigen Weg zu sein.
In CouchDB ist es nicht erforderlich, nicht zusammenhängende Daten in mehrere Datenbanken zu trennen. Wenn Sie Ihre Dokumente und Ansichten korrekt erstellt haben, werden nur relevante Daten in Ihren Abfragen angezeigt.
Wenn Sie Ihre Daten in separate Datenbanken aufteilen möchten, erstellen Sie einfach eine neue Datenbank.
%Vor%Aus meiner Erfahrung mit couchdb ist die Trennung von nicht verwandten Daten in verschiedene Datenbanken sehr wichtig für die Leistung und auch ein Kinderspiel. Die View Generation ist ein schmerzhafter Teil von Couchdb. Jedes Mal, wenn die Datenbank aktualisiert wird, müssen die Sichten (man denke an sie als Indizes in einer herkömmlichen relationalen SQL-Datenbank) neu generiert werden. Dies beinhaltet das Iterieren von jedem Dokument in der Datenbank . Also, wenn Sie 2 Millionen Dokumente vom Typ A sagen, und Sie haben 300 Dokumente vom Typ B. Und Sie müssen eine Ansicht neu generieren die Abfragen Typ B, dann werden alle 2 Millionen und 300 hundert Aufzählungen während der Ansichtserzeugung und es durchgeführt werden wird sehr lange dauern (es könnte sogar einen Lese-Timeout geben).
Daher ist es einfach, mehrere Datenbanken zu haben, wenn es darum geht, Ansichten zu halten (wie Sie in Couchdb eine offensichtlich wichtige und unvermeidliche Funktion abfragen).
@Zombies hat bezüglich der Leistung extrem Recht. CouchDB eignet sich nicht für die Ausführung vieler Dokumente in einer einzigen Datenbank. Wenn Sie mehr als 5000 Dokumente bearbeiten müssen, wird MongoDB besser sein als CouchDB.
Ansichten in CouchDB sind wichtig, aber schmerzhaft, mit begrenzten JavaScript-Optionen zum Erstellen Ihrer Abfragen (denken Sie nicht einmal an Dokumentenverweise oder verschachtelte Objekte). Es ist durchaus möglich, mehrere Datenbanken für verschiedene Dokumente zu verwenden. Manche Leute sagen etwas wie:
CouchDB ist eine NoSQL-Datenbank. Daher sollten Sie Ihre Dokumente weder bestellen noch filtern müssen, indem Sie etwas anderes als Ansichten verwenden. Kernfunktion der NoSQL-Datenbank ist die Möglichkeit, schemloslose Dokumente zu speichern [...]
Und ich finde es sehr ärgerlich, wenn Sie brauchen um eine Problemumgehung für die und Abfrage zu finden. Es macht Ihnen nichts aus, ein paar Datenbanken zu erstellen, um Ihre Daten zu trennen, wenn Sie Ihre Daten teilen können. Sie befinden sich immer noch in einer einzigen CouchDB-Installation . Vergessen Sie nicht, dass CouchDB für kleine Datenbanken geeignet ist. Je kleiner eine Datenbank ist, desto schneller wird Ihre Anfrage, desto besser ist die Leistung.
(Ich weiß nicht, ob es irgendwelche englischen Fehler gibt, bitte verzeiht mir)
BEARBEITEN Einige Unternehmen wie ArangoDB haben einen Vergleich zwischen sich selbst, MongoDB und CouchDB gemacht, und das bestätigt meine Aussage über die Anzahl der Dokumente. Dies ist das Ergebnis:
Es gibt viele andere Ressourcen auf ihrer Website. Auf der anderen Seite war diese Aussage eine persönliche Erfahrung, und aus dem Benchmarking für mein Praktikum, mit einer PHP-Benchmark-Software, die ich im Internet gefunden habe. Die Ergebnisse sind unten aufgeführt: