何时更新 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
阅读更多内容
所以我预计在不久的将来会有大约 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