2009-06-11 5 views
3

Was sind die Unterschiede zwischen einer Tabelle des Typs set und einer Tabelle des Typs ordered_set? Ich interessiere mich für die Unterschiede in der Lese-/Schreibleistung, was der Reihenfolge zugrunde liegt, die Auswirkungen über verteilte Knoten und so.Unterschiede zwischen set und ordered_set in Mnesia?

+1

Ich gehe davon aus, dass Sie echte Welt Erfahrungen wollen, da die Dokumentation auf den Modulen die Unterschiede ziemlich gut erklärt? –

+1

Ja, aber könnten Sie auf die Dokumentation verlinken, von der Sie sprechen? Die Dokumente, die ich gelesen habe, gehen nicht in die Tiefe. – mindeavor

Antwort

7

Die Reihenfolge basiert auf dem Primärschlüssel, was bedeutet, dass geordnete_Set-Tabellen viel schneller bei der Iteration mit komplexen Primärschlüsseln sind. Zum Beispiel, wenn Ihr Datensatz wie {{Key, Val1}, Val2} aussieht, können Sie auf Key abgleichen oder auswählen, um sehr schnell Val1 und Val2 für jedes Vorkommen von Key zu erhalten. Abgesehen davon ist mir kein signifikanter Unterschied in der Lese-/Schreibgeschwindigkeit bekannt.

Fragmentieren von ordered_set-Tabellen ist ebenfalls möglich, obwohl dies bedeutet, dass die Iteration teilweise geordnet, aber nicht vollständig geordnet ist. Das Iterieren über ein einzelnes Fragment ist geordnet, aber die Reihenfolge von Fragment zu Fragment ist undefiniert.

1

soweit die Bestellung von der Quelle geht:

add_element(E, [H|Es]) when E > H -> [H|add_element(E, Es)]; 
add_element(E, [H|_]=Set) when E < H -> [E|Set]; 
add_element(_E, [_H|_]=Set) -> Set;  %E == H 
add_element(E, []) ->[E]. 

So sieht die Bestellung wie eine gerade < oder> Vergleich auf dem Element.

Anders als die Bestellung ist es genau das gleiche wie das Set. Ich würde also raten, dass für Elemente mit niedrigerem "Wert" Lookups im Durchschnitt schneller sein würden als das Set. Aber ansonsten bin ich mir nicht sicher.

Da Erlang prozessunabhängig ist und keine variable Änderung erlaubt, sollten die Auswirkungen auf verteilte Knoten identisch mit lokalen Knoten sein.

Caveat:

Ich habe kein Benchmarking auf zwei Arten ausgeführt werden, so diese Spekulation meinerseits in Bezug auf Leistung.

+0

ok so offensichtlich habe ich die Frage nicht genau genug gelesen. Dies ist in Bezug auf Mnesiatabellen nicht der Datentyp selbst. Fühlen Sie sich frei, mich zu modifizieren. –

Verwandte Themen