set 类型的表和ordered_set 类型的表有什么区别?我对读/写性能的差异、排序的依据、分布式节点的影响等感兴趣。
问问题
1546 次
2 回答
7
排序基于主键,这意味着ordered_set 表在使用复杂主键进行匹配/选择迭代时要快得多。例如,如果您的记录看起来像{{Key, Val1}, Val2}
,您可以匹配或选择 onKey
以非常快速地获取Val1
和Val2
的每次出现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 回答