我运行了一些动态的编程代码(试图暴力推翻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 是有希望和具有蟒蛇的接口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top