我正在使用 python 存储一个表,我需要持久性。
本质上,我将表格存储为数字的字典字符串。并且整体用架子存放
self.DB=shelve.open("%s%sMoleculeLibrary.shelve"%(directory,os.sep),writeback=True)
我将 writeback
设置为 True
,因为我发现如果不这样做,系统会变得不稳定。
计算完成后,系统需要关闭数据库,并将其存储回去。现在数据库(表)大约有 540MB,而且需要很长时间。表增长到大约 500MB 后,时间激增。但我需要一张更大的 table 。事实上,我需要其中两个。
我可能使用了错误的持久性形式。我可以做些什么来提高性能?
最佳答案
为了存储一个包含string : number
键值对的大型字典,我建议使用 JSON 原生存储解决方案,例如 MongoDB .它有一个很棒的 Python API,Pymongo . MongoDB 本身是轻量级的,而且速度非常快,而 json 对象本身就是 Python 中的字典。这意味着您可以使用 string
键作为对象 ID,从而允许压缩存储和快速查找。
作为代码简单程度的示例,请参见以下内容:
d = {'string1' : 1, 'string2' : 2, 'string3' : 3}
from pymongo import Connection
conn = Connection()
db = conn['example-database']
collection = db['example-collection']
for string, num in d.items():
collection.save({'_id' : string, 'value' : num})
# testing
newD = {}
for obj in collection.find():
newD[obj['_id']] = obj['value']
print newD
# output is: {u'string2': 2, u'string3': 3, u'string1': 1}
您只需要从 unicode 转换回来,这很简单。
关于python - 搁置对于大型词典来说太慢了,我该怎么做才能提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525280/