2

如果不是因为我需要存储比我的 4 GB RAM 容量更多的数据,我可以使用 dict 来完成这项任务。我还在同一个程序中做其他需要内存的东西,所以内存要求越低越好。

我只想

  1. 存储许多字符串

  2. 检查集合中是否包含字符串

有没有一种 Python 方法可以做到这一点?我使用的是 3.3,所以 berkelydbs 出来了。

它还需要给出准确的答案,所以没有布隆过滤器。

4

4 回答 4

2

使用sqlite3它完全符合您的需求

如果您绝对需要快速查找,您可以使用 marisa 树,请参阅http://kmike.ru/python-data-structures/但首先您必须确认它是您应用程序中的瓶颈。尤其是缓存可以用磁盘数据库做奇妙的事情。不要过早优化。轮廓。

于 2012-11-08T18:11:23.277 回答
2

如果数据不适合您的内存,那么您将别无选择,您将不得不将其中一些数据临时存储在外部存储器(您的磁盘)中。正如您正确猜测的那样,文件访问既昂贵又缓慢,因此要做的就是将磁盘操作保持在最低限度。

由于您似乎需要一个键值存储(因为您有一个 dict),所以最好将其拆分,以便相关数据位于类似的位置,然后您可以快速读取块-明智地进入内存进行计算。

但是如何做到这一点完全取决于您实际在做什么,如果没有进一步的信息,我们无法真正帮助您。

顺便提一句。正如您提到的 Berkeley DB,实际上有Python 3.2 的绑定,如果它们也适用于 Python 3.3,我不会感到惊讶。否则 3.3 仍然是相当新的,所以可能会更新。如果您正在寻找替代的键值存储数据库,不妨试试redis 。我还没有尝试过Python 绑定

于 2012-11-08T18:14:19.910 回答
1

好吧,如果您只需要存储它,为什么要将它保存在内存中,使用某种数据库。

于 2012-11-08T18:06:09.133 回答
1

只需使用标准shelve模块创建一个持久字典。

于 2012-11-08T18:15:24.243 回答