Python 如何加速非常慢的MongoDB查询?

Python 如何加速非常慢的MongoDB查询?,python,python-3.x,mongodb,Python,Python 3.x,Mongodb,我正在对每次大约300条json记录的循环执行MongoDB批量写入查询。我有一个update()函数和一个列表,对于列表中的每个元素,调用update(),每次执行都应该执行300个upsert查询的批量写入查询 以下是我的代码的简化版本,以便于阅读: MyList = [1, 2, 3, 4, 5 ...] def update(): Queries = [ [{'Unix': 1596873600.0, 'market': 'TEST'}, {

我正在对每次大约300条json记录的循环执行MongoDB批量写入查询。我有一个
update()
函数和一个列表,对于列表中的每个元素,调用
update()
,每次执行都应该执行300个upsert查询的批量写入查询

以下是我的代码的简化版本,以便于阅读:

MyList = [1, 2, 3, 4, 5 ...]

def update():
    Queries = 
       [
          [{'Unix': 1596873600.0, 'market': 'TEST'}, {'$set': {'Unix': 1596873600.0, 'O': '11586.08000000', 'H': '11801.72000000', 'L': '11562.17000000', 'C': '11775.52000000', 'V': '9066.55659000', 'market': 'TEST'}, 'upsert': True}], 
          [{'Unix': 1596888000.0, 'market': 'TEST'}, {'$set': {'Unix': 1596888000.0, 'O': '11775.52000000', 'H': '11808.27000000', 'L': '11706.39000000', 'C': '11738.10000000', 'V': '6628.24686700', 'market': 'TEST'}, 'upsert': True}],
          ... 
       ] #Total length is 300
    
    db['myCol'].bulk_write(Queries)


for x in MyList:
    update()
这段代码的问题是每次调用
update()
都会花费太多的时间来执行;不仅如此,
MyList
循环时执行时间也会增加

因此,一开始,每个查询大约需要1秒,但在列表中间查询最多需要3/4秒。现在,这里有两个问题:对于300个文档的批量操作来说,一秒钟不是已经太长了吗?为什么执行时间会增加到3/4秒

以下是一些更详细的信息:

  • 我通过一个简单的
    打印(f'time:{end-start}')
  • Unix
    market
    是指数
  • 我正在查询的数据库托管在不同的服务器上,而不是我的本地计算机上

  • 这个执行时间正常吗?我怎样才能加快速度?非常感谢您的建议。

    请确保您使用复合索引,如果没有帮助,请回到这里。我不熟悉python,但是看起来您一次又一次地运行相同的upsert:一次是通过
    bulk\u write
    ,另一次是通过
    在MyList:update()中为x运行
    @DanielF执行时间现在似乎在0.9秒和1.3秒左右,所以这是一个改进!我现在试图检查为什么每个查询都要花这么多时间确保字段的复合索引具有正确的排序顺序,这一点很重要。如果无法改进,则在
    bulk\u write
    方法中仍然存在
    oredered=False
    选项。这将加快插入速度,但您的
    \u id
    字段将不再表示要插入的数组中文档的顺序。此外,您确定需要使用
    upsert
    ?我的意思是,您在这里所做的是查询要插入的每个记录的数据库(“请更新该记录,如果它不存在,请插入它”)。如果您知道您正在插入唯一的记录,其中没有一条记录应该覆盖另一条记录,那么您不需要搜索它们,只需插入它们,这会快得多。