Effiziente Möglichkeit zum speichern und Abfragen von baumartigen hierarchischen Daten
Bitte siehe das Bild hier:
https://picasaweb.google.com/108987384888529766314/CS3217Project#5717590602842112850
So, wie Sie sehen können aus dem Bild, werden wir versuchen, speichern Sie hierarchische Daten in einer Datenbank. 1 hat der publisher kann Artikel 1 Artikel hat viele Kommentare und so weiter. Also, wenn ich die Verwendung einer relationalen Datenbank wie SQL Server, ich habe eine publisher-Tabelle, dann eine Artikel-Tabelle und Bemerkungen Tabelle. Aber die Kommentare, die Tabelle wird sehr schnell wachsen und sehr groß werden.
So, gibt es eine alternative, die ermöglicht es mir, zu speichern und Abfrage solcher Baum wie Daten effizient? Wie etwa NoSQL (MongoDB)?
- stackoverflow.com/questions/4048151/...
- das Thema wird ausführlich in dem folgenden thread. stackoverflow.com/questions/4048151/...
- Es ist nicht hierarchischen Daten. Es ist ein allgemeiner Fall der verbundenen Einrichtungen. Wenn einem Kommentar verlinkt werden könnte, um die anderen Kommentar-es ist eine hierarchische Struktur. So wie ich das verstehe - Sie brauchen nicht benachbart Listen oder verschachtelte Sätze. Fügen Sie einfach eine publisher-Feld der Tabelle Artikel, und Artikel-Feld den Kommentar, auf den Tisch.
- Und wenn du 1000000 Kommentare, die Sie Tabelle 100% haben über 1000000 Zeilen. Es ist unvermeidlich... Wenn Sie speichern möchten, die 100 Kommentare, benötigen Sie mindestens 100 Zeilen, bis Sie Folgen möchten 3nf Einschränkungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie angrenzende Listen für hierarchische Daten. Es ist effizient und einfach zu implementieren. Es funktioniert auch mit MySQL. Hier ein link: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/.
Hier ist gute Umfrage 8 NoSQL-verteilte Datenbanken und die Bedürfnisse, die Sie füllen.
Erwarten Sie, werden Sie mehr schreiben, als du Lesen?
Erwarten Sie müssen Sie low-latency-Daten-Zugriff, hohe Parallelität support und eine hohe Verfügbarkeit ist eine Voraussetzung?
Brauchen Sie dynamische Abfragen?
Bevorzugen Sie zum definieren von Indizes, die nicht map/reduce-Funktionen?
Ist die Versionsverwaltung wichtig?
Erwarten Sie Sie sammeln sich gelegentlich ändernden Daten, auf die vordefinierten Abfragen werden ausgeführt?
Erwarten Sie, werden Sie rasch verändernden Daten mit einer vorhersehbaren Größe der Datenbank (sollte passen meist in der Erinnerung)?
Erwarten Sie Grafik-Stil, Reich oder komplexen, vernetzten Daten?
Erwarten Sie müssen Sie zufällig, Echtzeit-lese - /Schreibzugriff auf BigTable-Daten?
Meisten NOSQL-Datenbank-design beinhaltet eine Kombination der folgenden Techniken:
Das schema, das Sie das Handwerk ist abhängig von verschiedenen Aspekten, die Sie Daten. Eine Lösung für Ihr problem kann sein, das folgende schema:
Hier der publisher ist eingebettet in einem Artikel dokumentieren. Wir können dies tun, weil es ist unwahrscheinlich, dass der publisher name wird sich ändern. Es spart auch uns anschauen müssen, bis publisher details jedes mal, wenn wir brauchen, auf einen Artikel.
Die Kommentare gespeichert sind, in Ihren eigenen Dokumenten, mit jedem Kommentar, mit Verlinkung zu einem Artikel. Finden alle Kommentare zu einem Artikel können Sie
und die Dinge zu beschleunigen können Sie immer hinzufügen", 'article_id ' per", um den index
Fand ich das SO posten, wenn die Suche die gleiche Sache, Die URL geschrieben von Phpdevpad ist gut zu Lesen und zu verstehen, wie Angrenzens Liste Modell und Nested Set Modell arbeiten und miteinander vergleichen. Der Artikel ist sehr viel zu Gunsten der Nested Set Modell und erklärt viele Unentschieden mit dem Rücken zur Liste des Angrenzens Modell, jedoch ich war sehr besorgt über die Massen-updates der verschachtelte Methode würde dazu führen,.
Die wichtigste Einschränkung zu angrenzens Listen, die in dem Artikel war, dass eine zusätzliche self-join erforderlich war für jede Ebene der Tiefe. Allerdings ist diese Einschränkung leicht überwunden werden, mit der Verwendung einer anderen Sprache (wie z.B. php) und eine rezessiv Funktion für die Suche nach Kindern wie hier beschrieben: http://www.sitepoint.com/hierarchical-data-database/
Ausschnitt aus url über die Verwendung des Angrenzens Liste Modell
Abschluss
Als Ergebnis bin ich jetzt davon überzeugt, dass die Angrenzens Liste Modell wird viel einfacher zu verwenden und zu verwalten, sich vorwärts zu bewegen.