Frage

Bei der Arbeit begannen wir vor kurzem ein Projekt mit CouchDB (eine dokumentenorientierte Datenbank). Ich habe eine harte Zeit, alle meine relationalen db Wissen un-Learning.

Ich frage mich, wie einige von euch dieses Hindernis überwunden? Wie hast du aufgehört relational und starten Sie denken documentally denken (ich entschuldige mich, dieses Wort für die Herstellung von).

Irgendwelche Vorschläge? Hilfreiche Hinweise?

Bearbeiten : Wenn es einen Unterschied macht, sind wir Ruby & Couchpotato mit in der Datenbank verbinden

.

Edit 2 : SO ich war das Streiten eine Antwort zu akzeptieren. Ich denjenigen gewählt, die mir geholfen, die am meisten zu lernen, denke ich. Allerdings gibt es keine wirkliche „richtige“ Antwort, nehme ich an.

War es hilfreich?

Lösung

Ich denke, nachdem zu diesem Thema auf ein paar Seiten durchlesen zu, es hängt alles von der Art der Daten, die Sie zu tun haben.

RDBMSes stellt einen Top-down-Ansatz, bei dem Sie die Datenbank-Designern, die Struktur aller Daten geltend machen, die in der Datenbank vorhanden sein werden. Sie legen fest, dass eine Person hat eine erste, letzte, Mittelnamen und eine Heimatadresse usw. können Sie erzwingen dies ein RDBMS verwenden. Wenn Sie nicht über eine Spalte für eine Homeplanet der Person haben, Pech wanna-be-Person, die eine andere als die Erde hat Homeplaneten; Sie fügen müssen eine Spalte in zu einem späteren Zeitpunkt oder die Daten nicht in dem RDBMS gespeichert werden. Die meisten Programmierer machen Annahmen wie diese in ihren Anwendungen trotzdem, so ist dies nicht eine dumme Sache zu übernehmen und durchzusetzen. Definieren Dinge können gut sein. Aber wenn Sie zusätzliche Attribute in Zukunft anmelden müssen, werden Sie sie in hinzufügen. Die Beziehung Modell geht davon aus, dass Ihre Daten Attribute werden nicht viel ändern.

„Cloud“ Typ Datenbanken so etwas wie MapReduce verwendet, in Ihrem Fall CouchDB, nicht die obige Annahme machen, und stattdessen auf Daten aus dem Bottom-up aussehen. Die Dateneingabe in Dokumenten, die eine beliebige Anzahl von unterschiedlichen Eigenschaften haben könnte. Er geht davon aus, dass Ihre Daten, per definitionem, in den Attributtypen vielfältig es haben könnte. Er sagt: „Ich weiß nur, dass ich dieses Dokument in der Datenbank Person haben, die ein Homeplanet Attribut hat‚Eternium‘und Vorname des‚Herrn Nuckel‘, aber kein Name.“ Dieses Modell paßt Webseiten: alle Web-Seiten sind ein Dokument, aber die eigentliche Inhalt / tags / Tasten des Dokuments variieren soo weit, dass Sie sie nicht in die starre Struktur passen, dass das DBMS von auf hoche doziert. Aus diesem Grund ist Google die MapReduce Modell roxors soxors denkt, weil die Google-Datensatz so vielfältig ist es für Mehrdeutigkeit bauen in muss von der get-go, und aufgrund der massiven Datenmengen der Lage sein, eine parallele Verarbeitung zu nutzen (die MapReduce macht trivial) . Das Dokument-Datenbank-Modell geht davon aus, dass Ihre Daten Attribute viel ändern oder sehr vielfältig sein mit „Lücken“ und vielen dünn besiedelter Spalten können / werden, die man finden kann, wenn die Daten in einer relationalen Datenbank gespeichert wurden. Während Sie ein RDBMS speichern Daten wie diese verwenden könnten, wäre es wirklich schnell hässlich.

Ihre Frage dann zu beantworten: Sie können nicht denken, „relational“ überhaupt, wenn in einer Datenbank suchen, das MapReduce-Paradigma verwendet. Da ist es nicht wirklich eine erzwungene Beziehung hat. Es ist ein konzeptioneller Buckel Sie nur über bekommen.


Ein guter Artikel Ich lief in diesem vergleicht und kontrastiert die beiden Datenbanken ziemlich gut ist MapReduce: ein großer Schritt zurück , die argumentiert, dass MapReduce Paradigma Datenbanken rückwärts ein technologischer Schritt sind, und sind schlechter als RDBMSes. Ich habe mit der These des Autors nicht einverstanden und würde vor, dass die Datenbank-Designer würden einfach die richtigen für seine / ihre Situation wählen haben.

Andere Tipps

Es ist alles über die Daten. Wenn Sie die Daten, die relational meisten Sinn macht, kann ein Dokumentspeicher nicht nützlich sein. Ein typisches Dokument basiertes System ein Suchserver ist, können Sie eine große Datenmenge haben und wollen ein bestimmtes Element / Dokument finden, das Dokument ist statisch, oder versioniert.

In einem Archivtyp Situation könnten die Dokumente buchstäblich Dokumente sein, die sich nicht ändern und haben sehr flexible Strukturen. Es macht keinen Sinn, ihre Metadaten in einer relationalen Datenbank zu speichern, da sie alle sehr unterschiedlich, so sehr wenige Dokumente sind, können diese Tags teilen. Dokument-basierte Systeme speichern keine Nullwert.

Nicht-relationale / dokumentartigen Daten macht Sinn, wenn denormalized. Es braucht nicht viel zu ändern oder Sie nicht so viel über die Konsistenz sorgen.

Wenn Ihr Anwendungsfall ein relationales Modell paßt gut, dann ist es wahrscheinlich nicht wert es in ein Dokument Modell zusammenzudrücken.

Hier ist ein guter Artikel über nicht relationale Datenbanken .

Eine andere Möglichkeit, darüber nachzudenken, ein Dokument eine Zeile. Alles über ein Dokument ist in dieser Zeile und es ist spezifisch für das Dokument. Reihen sind leicht zu spalten auf, so Skalierung ist einfacher.

In CouchDB, wie Lotus Notes, sollten Sie wirklich nicht darüber nachdenken, ein Dokument zu einer Reihe analog zu sein.

Stattdessen wird ein Dokument ist eine Beziehung (Tabelle).

Jedes Dokument hat eine Anzahl von Zeilen - die Feldwerte:

ValueID(PK)  Document ID(FK)   Field Name        Field Value
========================================================
92834756293  MyDocument        First Name        Richard
92834756294  MyDocument        States Lived In   TX
92834756295  MyDocument        States Lived In   KY

Jede Ansicht ist eine Quer Registerkarte Abfrage, die über eine massive UNION ALL ist jedes Dokument auswählt.

Also, es ist immer noch relational, aber nicht in dem intuitivsten Sinne, und nicht in dem Sinne, dass die meisten Fragen. Gute Datenmanagementpraktiken

dokumentenorientierte Datenbanken haben das Konzept der Beziehungen nicht ablehnen, sie manchmal nur lassen Anwendungen dereferenzieren den Links (CouchDB) oder sogar eine direkte Unterstützung für die Beziehungen zwischen Dokumenten (MongoDB) haben. Was noch wichtiger ist, dass DODBs ist schema weniger. In tabellenbasierten Speichern kann diese Eigenschaft mit erheblichen Aufwand erreicht werden (siehe Antwort von richardtallent), aber hier ist es effizienter gemacht. Was sollten wir wirklich lernen, wenn sie von einem RDBMS zu einem DODB Schalt ist über Tabellen zu vergessen und darüber nachzudenken, Daten zu starten. Das ist, was sheep nennt die „Bottom-up“ -Ansatz. Es ist eine sich ständig weiterentwickelnden Schema, kein vordefiniertes Prokrustesbett. Natürlich bedeutet dies nicht, dass Schemen vollständig in irgendeiner Form aufgegeben werden soll. Ihre Anwendung muss die Daten interpretieren, irgendwie seine Form zu beschränken - dies kann durch die Organisation von Dokumenten in Sammlungen erfolgen, durch Modelle mit Validierungsmethoden machen -. Aber das ist nun die Aufgabe der Anwendung

können Sie diese Zeilen lesen sollte http://books.couchdb.org/relax/getting-started

ich mich gehört es einfach und es ist interessant, haben aber keine Ahnung, wie das in der realen Welt Anwendung implementiert;)

Eine Sache, die Sie versuchen können, ist eine Kopie von Firefox und Firebug bekommen, und das Spiel mit den Karte und reduzieren Funktionen in Javascript. sie sind eigentlich ganz cool und macht Spaß, und scheinen die Basis zu sein, wie die Dinge in CouchDB zu tun bekommen

hier ist Joels kleinen Artikel über das Thema: http: //www.joelonsoftware .com / Artikel / 2006/08 / 01.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top