2017-02-22 3 views
0

Ich dachte, die einfachste Sache eine flache Liste wäre:Was ist der effizienteste Weg, um eine Baumstruktur in MongoDB zu speichern?

{ 
    id: ObjectId() 
    parentId: ObjectId() 
    value: ‘foo’, 
} 

Nur eine große Sammlung. Um die untergeordneten Knoten eines Knotens zu finden, durchsuchen Sie die Liste und suchen Sie alle Instanzen, in denen die parentId der aktuellen Knoten-ID entspricht. Indizes auf ID/ParentId.

Dies könnte für Schreibvorgänge schneller sein, aber Lesevorgänge können ziemlich schrecklich werden. Und wir werden viel mehr lesen als schreiben!

MongoDB hat eine Art von in Baumdatenstruktur aufgebaut: https://docs.mongodb.com/manual/applications/data-models-tree-structures/

Aber ich frage mich, wie das wie das von einer flachen Liste unterscheidet ich vorgeschlagen.

Antwort

1

Wenn Sie einen Index für id und einen Index für parentId definieren, sollten die untergeordneten Elemente eines Knotens sehr schnell sein.

Warum denkst du wird es schrecklich sein?


UPDATE: Der schlimmste Fall O(log N) sein würde, aber es ist wichtig zu beachten, dass der Eimer Größe Mongo verwendet, ist 8192 (source). Das bedeutet, dass sich eine wirklich kleine Konstante multipliziert, was bedeutet, dass MongoDB-Operationen ziemlich schnell sein können.

+0

Es wäre nicht so schlimm. Aber jedes Mal, wenn Sie die Kinder eines Knotens finden mussten, mussten Sie sich die gleiche Sammlung ansehen und sie erneut lesen. Worst Case ich denke, ist log (n) Zeit, das ganze Ding mit einem Index darauf zu lesen. –

+1

@AlexanderMills ja, aber sie sind wirklich schnell wegen der Größe der Baum Eimer. Ich habe meine Antwort aktualisiert. – Lucas

Verwandte Themen