【问题标题】:Differences between set and ordered_set in Mnesia?Mnesia中set和ordered_set之间的区别?
【发布时间】:2010-11-02 05:48:48
【问题描述】:

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

【问题讨论】:

  • 我假设您想要真实世界的体验,因为模块上的文档很好地解释了这些差异?
  • 是的,但是你能链接到你正在谈论的文档吗?我一直在阅读的文档没有深入。

标签: database-design erlang schema mnesia


【解决方案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 与进程无关并且不允许修改变量,因此跨分布式节点的效果应该与本地节点相同。

警告:

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

【讨论】:

  • 好吧,很明显我没有仔细阅读这个问题。这是关于 mnesia 表而不是数据类型本身。随意修改我。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2014-12-05
    • 1970-01-01
    • 2017-01-22
    • 2016-03-26
    • 2016-03-02
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多