如果不是因为我需要存储比我的 4 GB RAM 容量更多的数据,我可以使用 dict 来完成这项任务。我还在同一个程序中做其他需要内存的东西,所以内存要求越低越好。
我只想
存储许多字符串
检查集合中是否包含字符串
有没有一种 Python 方法可以做到这一点?我使用的是 3.3,所以 berkelydbs 出来了。
它还需要给出准确的答案,所以没有布隆过滤器。
如果不是因为我需要存储比我的 4 GB RAM 容量更多的数据,我可以使用 dict 来完成这项任务。我还在同一个程序中做其他需要内存的东西,所以内存要求越低越好。
我只想
存储许多字符串
检查集合中是否包含字符串
有没有一种 Python 方法可以做到这一点?我使用的是 3.3,所以 berkelydbs 出来了。
它还需要给出准确的答案,所以没有布隆过滤器。
使用sqlite3它完全符合您的需求
如果您绝对需要快速查找,您可以使用 marisa 树,请参阅http://kmike.ru/python-data-structures/但首先您必须确认它是您应用程序中的瓶颈。尤其是缓存可以用磁盘数据库做奇妙的事情。不要过早优化。轮廓。
如果数据不适合您的内存,那么您将别无选择,您将不得不将其中一些数据临时存储在外部存储器(您的磁盘)中。正如您正确猜测的那样,文件访问既昂贵又缓慢,因此要做的就是将磁盘操作保持在最低限度。
由于您似乎需要一个键值存储(因为您有一个 dict),所以最好将其拆分,以便相关数据位于类似的位置,然后您可以快速读取块-明智地进入内存进行计算。
但是如何做到这一点完全取决于您实际在做什么,如果没有进一步的信息,我们无法真正帮助您。
顺便提一句。正如您提到的 Berkeley DB,实际上有Python 3.2 的绑定,如果它们也适用于 Python 3.3,我不会感到惊讶。否则 3.3 仍然是相当新的,所以可能会更新。如果您正在寻找替代的键值存储数据库,不妨试试redis 。我还没有尝试过Python 绑定。
好吧,如果您只需要存储它,为什么要将它保存在内存中,使用某种数据库。
只需使用标准shelve
模块创建一个持久字典。