【发布时间】:2010-10-27 01:33:32
【问题描述】:
我有数十亿条记录(键/值)要紧凑地存储在内存中,我需要支持的唯一操作是通过键查找值。键和值都是小字符串。最重要的是数据结构是如何压缩的;它应该比简单的关联数组更深入地使用键的内部结构。例如,将键“apple”、“apply”和“apron”映射到值“1”、“2”和“3”应该以某种方式进行压缩。我在寻找什么数据结构?
【问题讨论】:
标签: data-structures
我有数十亿条记录(键/值)要紧凑地存储在内存中,我需要支持的唯一操作是通过键查找值。键和值都是小字符串。最重要的是数据结构是如何压缩的;它应该比简单的关联数组更深入地使用键的内部结构。例如,将键“apple”、“apply”和“apron”映射到值“1”、“2”和“3”应该以某种方式进行压缩。我在寻找什么数据结构?
【问题讨论】:
标签: data-structures
听起来你想要一个trie - 它通过只存储每个前缀一次来完成你描述的那种“压缩”。
我假设您有足够的内存来存储“数十亿”个密钥,当然,您首先需要在 64 位系统上才能处理这么多的项目。
【讨论】:
你可以试试Trie。它从键字符串本身形成一个树结构。不会有空位置(如在哈希图中)。
【讨论】:
即使您正在处理的数据是小字符串,您真的确定您需要在内存中存储这么多数据吗?这很容易达到千兆字节的内存,并且大多数数据可能不会被如此频繁地查询。
经过微调的数据库可能足以满足您的需求。
【讨论】: