Python 何时更新mongo db索引

Python 何时更新mongo db索引,python,mongodb,pymongo,Python,Mongodb,Pymongo,因此,我预计在不久的将来会有大约2000个集合,其中包含10000-100000个文档,我正试图找出如何构建索引。如何在基本层面上实现这一点似乎非常简单,但何时运行重新索引却让我大吃一惊。假设我有这个函数,它创建了我需要的所有索引: def ensure_indexes(self): collections = get_collections() for coll in collections: coll.ensure_index([('time_stamp',

因此,我预计在不久的将来会有大约2000个集合,其中包含10000-100000个文档,我正试图找出如何构建索引。如何在基本层面上实现这一点似乎非常简单,但何时运行重新索引却让我大吃一惊。假设我有这个函数,它创建了我需要的所有索引:

def ensure_indexes(self):
    collections = get_collections()
    for coll in collections:
        coll.ensure_index([('time_stamp', pymongo.DESCENDING])
        coll.ensure_index([('raw_value', pymongo.DESCENDING])
        coll.ensure_index([('time_stamp', pymongo.DESCENDING, ('raw_value', pymongo.DESCENDING])

白天会有很多数据库更新,也会有一些人查询。当没有很多人在集合中插入新文档时,我是否应该在夜间执行cron作业来运行上述功能?如果人们查询数据库,并且集合已更新,但索引未更新,那么查询响应是否不包括最近添加的文档?或者新添加的文档是否包含在索引中?

在正常情况下,您不需要重建索引,只需创建一次索引,请阅读以下内容:

是否应在每次插入后运行ensureIndex() 不需要。只需为单个集合创建一次索引。 初始创建后,MongoDB会自动将索引更新为 数据更改

如果索引不存在,则运行ensureIndex()通常是正常的 由于正在进行的管理工作,可能需要调用ensureIndex() 中断数据库可用性。运行ensureIndex()可以呈现 在创建索引时无法访问副本集。参见构建 副本集上的索引


如果发生损坏,您需要重新构建索引,请使用
db.collection.reIndex()
,您可以从

中了解更多内容。为什么需要重建索引?显然是因为我误解了他们的行为。我现在看到它们会随着每次插入自动更新索引。仅供参考,您不需要第一个索引
('time\u stamp',pymongo.DESCENDING])
,因为它是第三个索引的适当子集:
('time\u stamp',pymongo.DESCENDING,('raw\u value',pymongo.DESCENDING])
。好的,这很有意义。那么,在创建新集合时只构建这些索引似乎是正确的行为吗?@clifgray,在正常情况下完全正确。谢谢您的快速响应。您指给我的文档在哪里?我以为我读了整个ensureIndex()佩奇。@clifgray,没问题,我们有时都会对最终显而易见的事情感到困惑;)