我有大约 10 万个(相当短的)unicode 字符串,每个字符串都有一个相应的整数。
我需要将它们存储在一个类似字典的持久对象中,然后只能读取该对象。
我正在寻找一种解决方案,它不会填满加载整个结构的 ram,也不会占用太多磁盘空间。
我已经尝试过 dbm 和 shelve ,但我得到了一个 30Mb+ 的结果文件。
我确信有更适合这种特定情况的工具,因此欢迎提供任何指针(针对 python2 或 python3)。
最佳答案
索引
您可能想要建立一个索引。
数据库是一个文件,每个字符串在一行(或其他分隔符),行尾有数字。
字符串已排序。
你可以做二分查找。
您可以使用归并排序来构建结构。将两个索引文件合并为一个。
成本:O(n*log(n))
在创建过程中写入每个映射
搜索期间的 O(log(n))
查找(在旋转磁盘上进行大量搜索需要很长时间)O(max_string_length)
内存使用
我们用 Java 为搜索引擎研讨会构建了这样一个东西。它可以增长到千兆字节并且仍然可以快速响应。在这种情况下,它被称为 inverted index 。
目录结构
您可以为字符串创建一个目录,并在此目录中创建一个以数字作为名称的字符串。如果幸运的话,每个条目不会占用 4kb。我不知道。
关于python - 设置具有许多键但简单值的持久只读字典的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32937346/