用pymong在一个命令中更新多个计数器

2024-09-30 19:34:41 发布

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

我正在处理一些文本文件,以搜索模式和计数。由于文件非常大,处理时间是一个重要的问题。我有一个python代码,可以更新计数器并将其存储在mongodb中。为了使它工作得更快,我正在努力减少db操作的数量

原始版本每一次出现都在递增:

mlcol.find_one_and_update(
    {"connip": conip}, 
    {"$inc":{ts:1}}, 
    upsert=True
)

由于这需要很长时间,我所做的是将计数器保存在内存中,在字典中,并定期检查这些数据以存储它们:

for conip in conCounter.keys():
    d = conCounter[conip]
    for ts in d.keys():
        mlcol.find_one_and_update(
            {"connip": conip}, 
            {"$inc":{ts:d[ts]}}, 
            upsert=True
        )

这样的过程要快得多,但是我发现单独更新每个计数器仍然需要很长时间

有没有办法在一个命令中启动多个更新

有没有其他的办法让事情进展得更快


Tags: andintruefor计数器updatefindone
1条回答
网友
1楼 · 发布于 2024-09-30 19:34:41

正如Alex Blex所解释的,创建索引和批量执行解决了这个问题:

mlcol.create_index("connip")


bulk=mlcol.initialize_unordered_bulk_op()
for conip in conCounter.keys():
    d = conCounter[conip]
    for ts in d.keys():
        bulk.find({"connip": conip}).upsert().update({"$inc":{ts:d[ts]}})
res=bulk.execute()

相关问题 更多 >