建立具有许多键但简单值的持久只读字典的有效方法

Efficient way to set up a persistent read-only dictionary with many keys but simple values

我有大约 100k(相当短)的 unicode 字符串,每个字符串都有一个对应的整数。

我需要将它们存储在类似字典的持久对象中,然后仅供阅读访问。

我正在寻找一种解决方案,它不会填满加载整个结构的 ram,并且不会太贪婪地占用磁盘上的 space。

我已经尝试过 dbm and shelve,但我得到的结果文件超过 30Mb。

我确信有一些工具更适合这种特定情况,因此欢迎任何指点(针对 python2 或 python3)。

索引
您可能想建立一个索引。

数据库是一个文件,每个字符串在一行(或其他分隔符)中,数字在行尾。 字符串已排序。 你可以进行二进制搜索。 您可以使用合并排序来构建结构。将两个索引文件合并为一个。

费用:

O(n*log(n)) 在创建期间写入每个映射
O(log(n)) 搜索期间查找(很多搜索在旋转磁盘上花费很长时间)
O(max_string_length) 内存使用

我们在 Java 中为搜索引擎研讨会构建了这样的东西。它可以增长到千兆字节,但仍能快速响应。在这种情况下,它被称为 inverted index.

目录结构
您可以为该字符串创建一个目录,并在该目录中创建一个以数字作为名称的字符串。如果幸运的话,每个条目不会占用 4kb。我不知道。