内存有效的检查包含方式

时间:2012-11-08 18:00:36

标签: python large-data

这是一个我可以使用dict的任务,如果不是因为我需要存储的数据多于我的4 GB内存中的数据。我也在同一个程序中做其他需要内存的东西,所以内存需求越低越好。

我只想

  1. 存储许多字符串

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

  3. 有没有Python方法这样做?我正在使用3.3,所以berkelydbs已经出局了。

    它还需要给出确切的答案,所以没有Bloom过滤器。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

如果数据不适合您的内存,那么您将无法选择,您必须将部分数据暂时存储在外部存储(您的磁盘)中。正如您所猜测的那样,文件访问是昂贵且缓慢的,因此要将磁盘操作保持在最低限度。

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

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

顺便说一下。正如你提到的Berkeley DB,Python 3.2实际上有bindings,如果他们也使用Python 3.3,我也不会感到惊讶。否则3.3仍然是新的,所以可能会有更新。如果您正在寻找替代的键值存储数据库,可以尝试redis。我没有试过Python bindings

答案 2 :(得分:1)

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

答案 3 :(得分:1)

只需使用标准shelve模块即可创建持久词典。