我正在使用ZODB和ZEO,并在其中存储一个Btree(),其中包含约2500万个对象,这些对象的键是长度不同的文本字符串。为了以“安全且可预测的方式”迭代对象,我遵循BTrees documentation的建议,首先复制键列表,如下所示(其中db
是BTree对象):
for key in list(db.keys()):
...do stuff...
但是,创建密钥列表需要相对较长的时间,即使是在最近使用48 GB RAM的多核服务器级系统上(运行CentOS 7,裸机,而不是在VM中)。如果我单独计算一下简单地做list(db.keys())
需要多长时间,需要9-10分钟。就大小而言,sys.getsizeof(list(db.keys()))
报告220mb,这与2500万个字符串的列表的预期大小一致,这些字符串的长度在2-70个字符(大约)之间变化。你知道吗
有没有一种更快的方法来执行将键复制到列表的步骤,或者,有没有一种更好的方法来以一种安全的方式迭代BTree元素,以防其他进程向BTree添加对象?你知道吗
我曾尝试在Python中研究更快的复制方法,但我发现的重点是复制列表或字典(例如,过去的SO问题here和here),而不是从BTree中“列出”键。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐