Mnesia中set和ordered_set之间的差异?

时间:2009-06-11 18:34:28

标签: database-design erlang schema mnesia

类型集表和ordered_set类型表之间有什么区别?我对读/写性能的差异,基于排序的内容,跨分布式节点的影响等感兴趣。

2 个答案:

答案 0 :(得分:7)

排序基于主键,这意味着ordered_set表在使用复杂主键进行匹配/选择迭代时要快得多。例如,如果您的记录看起来像{{Key, Val1}, Val2},则可以匹配或选择Key,以便在每次Val1出现时快速获得Val2Key。除此之外,我不知道读/写速度的显着差异。

也可以对ordered_set表进行分段,但这意味着迭代将部分排序,但不是完全排序的。对单个片段进行迭代是有序的,但是从片段到片段的顺序是未定义的。

答案 1 :(得分:1)

只要订购来自消息来源:

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

因此,排序看起来像一个直的&lt;或者&gt;元素的比较。

除了订购之外,它与套装完全相同。因此我猜测,对于较低“值”的元素,查找平均值会比集合更快。但除此之外,我不确定。

由于Erlang与进程无关,并且不允许进行变量修改,因此跨分布式节点的效果应与本地节点相同。

警告:

我没有对这两种类型进行任何基准测试,所以这是我对性能的猜测。