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?
Antwort
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.
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.
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. –
- 1. Was sind die grundlegenden Unterschiede zwischen Set und Didset?
- 2. das ist effizienter zwischen ets und mnesia
- 3. Bash Unterschiede zwischen {} und()?
- 4. Unterschiede zwischen Mustererkennung und Vereinheitlichung?
- 5. Unterschiede zwischen mousemove und touchnove
- 6. Unterschiede zwischen für ... in und für ... .. in
- 7. Unterschiede zwischen schwach und unsafe_unreated
- 8. Unterschiede zwischen NoClassDefFoundError und ClassNotFoundException?
- 9. Unterschiede zwischen RestKit und AFIncrementalStore
- 10. Unterschiede zwischen char * und String
- 11. Unterschiede zwischen Funktoren und Endofunkern
- 12. Unterschiede zwischen MPI_Scatter und MPI_Bcast
- 13. Unterschiede zwischen _redirect ('*/* /') und _redirect ('*/*')
- 14. Unterschiede zwischen BaseHttpServer und wsgiref.simple_server
- 15. Unterschiede zwischen AForge und OpenCV
- 16. Unterschiede zwischen RxJava1 und RxJava2
- 17. Unterschiede zwischen `.EditingDidEnd` und` .EditingDidEndOnExit`
- 18. Unterschiede zwischen OPC und DDS?
- 19. Unterschiede zwischen SipApplicationSession und ServletContext
- 20. Unterschiede zwischen Go und Cython
- 21. Unterschiede zwischen ActionExecutingContext und HttpActionContext
- 22. Unterschiede zwischen memchr() und strchr()
- 23. Unterschiede zwischen Thread.sleep() und TimeUnit.SECONDS.sleep()
- 24. Unterschiede zwischen Minimalschlüssel und Kandidatenschlüssel?
- 25. Unterschiede zwischen Coroutines und `goto`?
- 26. Unterschiede zwischen Log und Logger?
- 27. Unterschiede zwischen BasicRenderEngine und LazyRenderEngine?
- 28. Unterschiede zwischen ado und bde
- 29. Unterschiede zwischen Boost.Coroutine und Boost.Coroutine2
- 30. Unterschiede zwischen Datenattributen und Methodenattributen
Ich gehe davon aus, dass Sie echte Welt Erfahrungen wollen, da die Dokumentation auf den Modulen die Unterschiede ziemlich gut erklärt? –
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