蟒蛇的基于磁盘的字典
-
03-07-2019 - |
题
我运行了一些动态的编程代码(试图暴力推翻Collatz猜想=P)和我使用的字典储存的长链子我已经计算出的。显然,它跑出存在一些点。是否有任何简单的方法来使用某些变体中的一个 dict
这将页的部分本身磁盘的时候它运行的房间吗?显然,它会慢于一个内存字典,以及它可能会结束,吃我的硬盘驱动器的空间,但这可能适用于其他问题,都不是徒劳的。
我意识到,基于磁盘的字典中是漂亮多了一个数据库,因此我手实施一个使用sqlite3,但是我并没有这样做的任何明智的方式,并不得不看它的每一个元数据库中一个在一段时间...它是关于300x慢。
是最聪明的办法只创造我自己设置的字典,保持唯一一个存储在一段时间,并寻呼他们出去在一些有效的方式?
解决方案
哈希上磁盘通常是解决与Berkeley DB或类似的东西-几个选项中列出的 蟒蛇的数据持久性文件.你可以前它在高速缓冲存储器,但我会试验针对母性的第一次;与操作系统的高速缓存在的地方,它可能会出来有关相同。
其他提示
第3次方 推 模块也是值得一看。它非常类似于搁置在于,它是一个简单的字典-喜欢的对象,然而它可以存储的各种后台(例如文件,SVN,并S3),提供可选择的压缩,甚至线程安全的。这是一个非常有用的模块
from shove import Shove
mem_store = Shove()
file_store = Shove('file://mystore')
file_store['key'] = value
我最后一次面临这样的问题,我改写了使用源码而不是字典,并有一个大规模的性能增加。这一业绩的增加至少部分地上的帐户的数据库的索引编制能力;根据你的算法,情况因人而异。
一个薄包装,并源码查询 __getitem__
和 __setitem__
没有太多的代码来编写.
的 搁置 模块可以做;无论如何,它应该是简单的测试。代替:
self.lengths = {}
这样做:
import shelve
self.lengths = shelve.open('lengths.shelf')
唯一的缺点是,钥匙架必须串,所以你必须替换
self.lengths[indx]
与
self.lengths[str(indx)]
(我假设你的钥匙只是整数,按你的意见对查尔斯*达菲的文章)
有没有内在的记忆缓存在,但是你的操作系统可以为你做的呢。
[实际上,这是不真实的:你可以通过参数'写回=True'上创建。目的是为了确保储存清单和其他可变的事情的架子可以正常工作。但一个副作用是,整个典缓存在的记忆。由于这引起的问题,它可能不是一个好主意:-)]
有一点点认为这似乎是,你可以得到的 搁置模块 做你想要什么。
我读过你认为搁置是太慢了,你试着破解你自己的字典中使用源码.
另一个这样做过:
http://sebsauvage.net/python/snyppets/index.html#dbdict
它似乎相当有效的(和sebsauvage是一个很好的编码器).也许你可以给它一试?
读回答这个问题从GvR;) 排序万32位整数在2MB RAM使用蟒蛇
你应该带来更多比一个项目的时间,如果有一些启发式以知道哪些是最有可能的项目是检索到接下来,并且不要忘记索引等鲁提及。
我没有尝试但是 仓鼠DB 是有希望和具有蟒蛇的接口。