Skalierung in Bezug auf verschachtelte vs Eltern / Kind-Dokumente

8

Ich führe einen Proof of Concept für uns durch, um verschachtelte Abfragen auf mehr "normalisierten" Daten in ES auszuführen.

z.B. mit verschachteltem

Kunde - & gt;      - Name
     - Email      - Ereignisse - & gt;            - erstellt            - Geben Sie

ein

Jetzt habe ich eine Situation, in der eine Liste von Ereignissen für einen bestimmten Kunden zu einem anderen Kunden verschoben werden kann. z.B. Kunde A hat 50 Ereignisse Kunde B hat 5000 Ereignisse

Ich möchte jetzt alle Ereignisse von Kunde A in Kunde B verschieben

Im Maßstab mit Millionen von Kunden und Abfragen werden auf diese für Diagramme in einer UI ausgeführt wird Parent / Child besser geeignet oder sollte verschachtelt in der Lage sein, damit umzugehen?

Was sind die Vor- und Nachteile in meiner Situation?

    
Derek Organ 18.02.2013, 14:53
quelle

1 Antwort

18

Es ist schwer, Ihnen sogar grobe Leistungsmesswerte wie "Verschachtelt ist gut genug" zu geben, aber ich kann Ihnen einige Details zu Nested vs Parent / Child geben, die Ihnen helfen können. Ich würde dennoch empfehlen, einige Benchmark-Tests durchzuführen, um zu überprüfen, ob die Leistung akzeptabel ist.

Verschachtelt

  • Verschachtelte Dokumente werden im selben Lucene-Block gespeichert, was die Lese- / Abfrageleistung unterstützt. Das Lesen eines verschachtelten Dokuments ist schneller als das entsprechende übergeordnete / untergeordnete Element.
  • Durch die Aktualisierung eines einzelnen Feldes in einem verschachtelten Dokument (übergeordnete oder verschachtelte untergeordnete Elemente) wird ES gezwungen, das verschachtelte gesamte Dokument neu zu indizieren. Dies kann für große verschachtelte Dokumente sehr teuer sein.
  • Ändern des "übergeordneten" bedeutet ES wird: altes Dokument löschen, altes Dokument mit weniger verschachtelten Daten neu indizieren, neues Dokument löschen, neues Dokument mit neuen verschachtelten Daten neu indizieren.

Eltern / Kind

  • Kinder werden getrennt vom übergeordneten Objekt gespeichert, werden jedoch an dasselbe Shard weitergeleitet. Also Eltern / Kinder sind etwas weniger Leistung bei Lese / Abfrage als verschachtelt
  • Übergeordnete / untergeordnete Zuordnungen haben ein wenig zusätzlichen Speicheraufwand, da ES eine "Join" -Liste im Speicher
  • verwaltet
  • Das Aktualisieren eines untergeordneten Dokuments wirkt sich nicht auf das übergeordnete Element oder andere untergeordnete Elemente aus, wodurch möglicherweise viel Indexierung in großen Dokumenten gespeichert wird
  • Das Ändern des übergeordneten Elements bedeutet, dass Sie das alte untergeordnete Dokument löschen und anschließend ein identisches Dokument unter dem neuen übergeordneten Dokument indizieren.

Es ist möglich, dass Nested funktioniert, aber wenn Sie denken, dass es die Möglichkeit für viele "Datenmischungen" gibt, dann ist Parent / Child möglicherweise besser geeignet. Verschachtelt eignet sich am besten für Fälle, in denen die verschachtelten Daten nicht häufig aktualisiert, sondern häufig gelesen werden. Parent / Child eignet sich besser für Arrangements, bei denen die Daten häufiger verschoben werden.

    
Zach 18.02.2013, 17:25
quelle

Tags und Links