何时更新 mongo 数据库索引

When to update mongo db indexes

所以我预计在不久的将来会有大约 2000 个集合,其中包含 10,000-100,000 个文档,并且我正在尝试弄清楚如何构建索引。在基本层面上如何做似乎很简单,但是什么时候 运行 重新索引让我很困惑。所以假设我有这个功能并且创建了我需要的所有索引:

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 作业,而没有多少人会在集合中插入新文档?如果人们查询数据库并且集合已经更新但索引没有更新,那么查询响应是否不包括最近添加的文档?或者新添加的文档会被收录到索引中吗?

一般情况下不需要重建索引,只需要创建一次索引,阅读自MongoDB FAQ:

Should you run ensureIndex() after every insert?¶

No. You only need to create an index once for a single collection. After initial creation, MongoDB automatically updates the index as data changes.

While running ensureIndex() is usually ok, if an index doesn’t exist because of ongoing administrative work, a call to ensureIndex() may disrupt database availability. Running ensureIndex() can render a replica set inaccessible as the index creation is happening. See Build Indexes on Replica Sets.

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

阅读更多内容