存储数十亿整数的数据结构

时间:2009-07-29 10:34:46

标签: c linux performance data-structures record

在内存(RAM)中存储数百万/十亿条记录(假设记录包含名称和整数)的最佳数据结构是什么。 最佳 - 最短搜索时间(第一优先级)和内存效率(第二优先级)?是帕特里夏树吗?还有什么比这更好的吗?

搜索关键字是整数(例如32位随机整数)。并且所有记录都在RAM中(假设有足够的RAM可用)。

在C,平台Linux ..

基本上我的服务器程序为用户分配一个32位随机密钥,我想存储相应的用户记录,以便我能够以有效的方式搜索/删除记录。可以假设数据结构将很好地填充。

5 个答案:

答案 0 :(得分:4)

取决于

您要搜索名称还是整数?

名称大小是否相同?

所有整数都是32位还是一些大数字?

你确定这一切都符合记忆吗?如果没有,那么你可能受到磁盘I / O的限制,而内存(或磁盘使用)则完全不再受到关注。

索引(名称或整数)是否具有公共前缀或是否均匀分布?只有它们有共同的前缀,patricia树才有用。

您是按顺序查找索引(帮派查找)还是随机查找?如果一切都是统一的,随机的并且没有共同的前缀,那么哈希就已经好了(这很糟糕)。

如果索引是使用帮派查找的整数,则可以查看基数树。

答案 1 :(得分:2)

我受过良好教育的猜测是B-Tree(但我可能错了......):

  

B树有很多优点   当替代实施时   节点访问时间远远超过访问   节点内的时间。这通常   在大多数节点进入时发生   二级存储,如硬盘驱动器。   通过最大化孩子的数量   每个内部节点内的节点   树的高度减少,   平衡发生的次数较少,而且   效率提高。通常这个   设置每个节点所需的值   一个完整的磁盘块或类似的   二级存储中的大小。虽然2-3   B树可能在主要用途中很有用   记忆,当然更容易   解释,如果调整节点大小   到磁盘块的大小,   结果可能是257-513 B树   (尺寸与较大尺寸有关   权力2)。

答案 2 :(得分:0)

您可以至少使用基数来开始,而不是哈希。

对于任何特定问题,您可以比btree,哈希表或patricia trie做得更好。更好地描述问题,我们可以建议可行的方法

答案 3 :(得分:0)

如果您只想通过整数键进行检索,那么简单的哈希表就是最快的。如果整数是连续的(或几乎是连续的)且唯一的,则一个简单的数组(指向记录的指针)甚至更快。

如果使用哈希表,您希望为预期的最终大小预先分配哈希表,以便它不会重新散列。

答案 4 :(得分:0)

我们可以使用每个节点为1/0的特里来存储整数值。这样我们就可以确保树的深度为32/64,因此提取时间是恒定的,并且具有亚线性空间复杂度。