有没有更快的方法来复制BTree键?

2024-06-16 09:16:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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问题herehere),而不是从BTree中“列出”键。你知道吗


Tags: 对象方法字符串文本列表dbhere方式