所以我期待在不久的将来有大约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工作来在晚上运行上述功能,而没有多少人会在集合中插入新文件?如果人们查询数据库并且集合已经更新但是索引不是该查询响应不包括最近添加的文档?或者新添加的文件是否会包含在索引中?
答案 0 :(得分:1)
在正常情况下,您不需要重建索引,只需要创建一次索引,从MongoDB FAQ读取:
每次插入后都应该运行ensureIndex()吗?¶
没有。您只需为单个集合创建一次索引。 初始创建后,MongoDB会自动将索引更新为 数据变化。
运行ensureIndex()通常没问题,如果索引不存在 由于正在进行的管理工作,可以调用ensureIndex() 破坏数据库可用性。运行ensureIndex()可以呈现一个 副本集在索引创建发生时无法访问。见Build 副本集上的索引。
如果出现损坏并且您需要再次构建索引,请使用db.collection.reIndex()
,您可以从HERE了解更多信息