什么是最有效的erlang模块,用于在Term下存储大量的键/术语值

时间:2013-03-16 13:27:50

标签: erlang

专注于读取性能,我想创建一个包含大量(100,000s)条目的Orddict或Proplist等术语,每个条目包含一个ID和一个Term值。这个封装术语应该能够返回存储在其键下的值,就像Orddict能够做的那样。

example:

 K001 - Term001
 K002 - Term002
 K003 - Term003

包含整个集合的结果Term需要从一个函数传递到另一个函数,用于多个计算目的,而不将其存储在持久性存储中以避免磁盘I / O.我还选择在此阶段不使用内存缓存来避免此时的架构复杂性,因此我的重点是让所有这些都只是密钥搜索。

Orddicts 是按键排序的,与普通的Dict相比,它增强了键的搜索。我不知道任何其他Erlang模块可以在其Term中嵌入更有效的索引机制。

对于比Orddict更好的方法的任何建议?

2 个答案:

答案 0 :(得分:8)

实际上,orddict是作为排序列表(source)实现的,因此它在插入和查找方面都表现不佳,尤其是当按升序插入密钥时。远离它;它不适用于您的用例。 dict是基于哈希的数据结构,提供可靠的插入/​​查找性能。如果键的顺序对您很重要,请考虑使用基于树的映射(例如gb_trees),因为您可以通过执行有序树步骤来提取有序键序列。

答案 1 :(得分:3)

如果要在Erlang进程之间共享大型数据集,可以尝试使用ETS。 它是fast内存中键值存储,仅支持破坏性更新。