2009-06-11 7 views
3

Quelles sont les différences entre une table de type set et une table de type ordered_set? Je m'intéresse aux différences dans les performances de lecture/écriture, sur quoi repose la commande, aux effets sur les nœuds distribués, etc.Différences entre set et ordered_set dans Mnesia?

+1

Je suppose que vous voulez des expériences du monde réel puisque la documentation sur les modules explique assez bien les différences? –

+1

Oui, mais pourriez-vous lier à la documentation dont vous parlez? Les documents que j'ai lus ne vont pas beaucoup en profondeur. – mindeavor

Répondre

7

La commande est basée sur la clé primaire, ce qui signifie que les tables ordered_set sont beaucoup plus rapides à faire correspondre/sélectionner l'itération à l'aide de clés primaires complexes. Par exemple, si votre enregistrement ressemble à {{Key, Val1}, Val2}, vous pouvez faire correspondre ou sélectionner sur Key pour obtenir très rapidement Val1 et Val2 pour chaque occurrence de Key. À part cela, je ne suis pas au courant d'une différence significative dans la vitesse de lecture/écriture.

Il est également possible de fragmenter des tables ordered_set, bien que cela signifie que l'itération sera partiellement ordonnée, mais pas entièrement ordonnée. L'itération sur un seul fragment est ordonnée, mais l'ordre d'un fragment à l'autre n'est pas défini.

1

jusqu'à la commande passe de la source:

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]. 

Ainsi, la commande ressemble à une < droite ou> comparaison sur l'élément.

En plus de la commande, c'est exactement la même chose que l'ensemble. Donc, je risque de deviner que pour les éléments de moins "valeur", les recherches seraient plus rapides en moyenne que l'ensemble. Mais à part ça, je ne suis pas sûr.

Comme Erlang est indépendant du processus et ne permet pas de modification variable, les effets sur les nœuds répartis doivent être identiques à ceux des nœuds locaux.

caveat:

Je n'ai pas exécuter une analyse comparative sur les deux types est donc ce spéculation de ma part en ce qui concerne la performance.

+0

ok donc évidemment je n'ai pas assez lu la question. C'est en ce qui concerne les tables Mnesia pas le type de données lui-même. N'hésitez pas à me moduler. –

Questions connexes