3

set 类型的表和ordered_set 类型的表有什么区别?我对读/写性能的差异、排序的依据、分布式节点的影响等感兴趣。

4

2 回答 2

7

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

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

于 2009-07-24T15:25:16.493 回答
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].

所以排序看起来像元素上的直接 < 或 > 比较。

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

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

警告:

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

于 2009-06-12T02:04:28.080 回答