6

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

example:

 K001 - Term001
 K002 - Term002
 K003 - Term003

包含整个集合的结果 Term 需要在函数之间传递,用于多种计算目的,而不是将其存储在持久存储中以避免磁盘 I/O。我还选择在这个阶段不使用内存缓存来避免此时的架构复杂性,因此我的重点是让所有这些都可以简单地通过键搜索。

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

对于比 Orddict 更好的方法有什么建议吗?

4

2 回答 2

9

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

于 2013-03-16T14:00:55.307 回答
4

如果你想在 Erlang 进程之间共享一个大数据集,你可以尝试使用ETS。它是快速的内存键值存储,仅支持破坏性更新。

于 2013-03-18T09:41:39.470 回答