设置具有多个键但简单值的持久只读字典的有效方法

问题描述 投票:0回答:2

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

我需要将它们存储在类似字典的持久对象中,然后只能进行读取访问。

我正在寻找一种解决方案,既不会填充加载整个结构的内存,也不会占用过多的磁盘空间。

我已经尝试过 dbmshelve,但我得到了 30Mb+ 的结果文件。

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

python python-3.x nosql
2个回答
2
投票

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

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

费用:

O(n*log(n))
在创建过程中写入每个映射
O(log(n))
搜索期间查找(许多搜索在旋转磁盘上需要很长时间)
O(max_string_length)
内存使用情况

我们用 Java 为搜索引擎研讨会构建了这样一个东西。它可以增长到千兆字节,并且仍然可以快速响应。在这种情况下,它被称为 倒排索引

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


0
投票

对于您的用例,您可以使用

persidict
persidict
是轻量级的,专为基于磁盘的键值存储而设计。它仅将数据的相关部分保留在内存中,从而节省空间。

在这种情况下使用数据库是多余的。但是,作为一个选项,它可以被使用。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.