何时 ensure_index 在 mongodb 中使用
When to ensure_index usage in mongodb
我有一个 mongo 数据库集合,每秒更新一次(添加一条新记录)。在索引属性上调用 ensure_index 一次就足够了吗?还是我必须重复调用它 - 例如在添加每个文档之后?
我知道 ensure_index 查看上次调用它的时间并可能重新索引集合。我不明白的是为什么这对我来说是必要的(或者更确切地说,我不知道这对我来说是否必要)。如果索引顺序或索引属性不随时间变化,是否需要每次添加新文档时重复调用一次ensure_index?
PyMongo 的 ensure_index
与 Mongo Shell ensureIndex
不完全相同。
在 3.0 之前的 PyMongo 版本中,ensure_index
将 尝试 仅当索引不在 驱动程序缓存中时才创建索引。后者是内存缓存中每个驱动程序的实例(用户可配置其 TTL)。因此,这可能会导致混乱的情况,即一个客户端可能会删除一个索引,而另一个客户端认为它仍然存在。
请注意,从 3.0 开始,ensure_index
is deprecated and you should now always use create_index
而不是 -- 如果索引已经存在,让它优雅地失败。
你应该只调用一次。实际上这个方法是imdepotent的,也就是说'once you created an index on attribute(s), repeating the same endureIndex will have no effect'
我有一个 mongo 数据库集合,每秒更新一次(添加一条新记录)。在索引属性上调用 ensure_index 一次就足够了吗?还是我必须重复调用它 - 例如在添加每个文档之后?
我知道 ensure_index 查看上次调用它的时间并可能重新索引集合。我不明白的是为什么这对我来说是必要的(或者更确切地说,我不知道这对我来说是否必要)。如果索引顺序或索引属性不随时间变化,是否需要每次添加新文档时重复调用一次ensure_index?
PyMongo 的 ensure_index
与 Mongo Shell ensureIndex
不完全相同。
在 3.0 之前的 PyMongo 版本中,ensure_index
将 尝试 仅当索引不在 驱动程序缓存中时才创建索引。后者是内存缓存中每个驱动程序的实例(用户可配置其 TTL)。因此,这可能会导致混乱的情况,即一个客户端可能会删除一个索引,而另一个客户端认为它仍然存在。
请注意,从 3.0 开始,ensure_index
is deprecated and you should now always use create_index
而不是 -- 如果索引已经存在,让它优雅地失败。
你应该只调用一次。实际上这个方法是imdepotent的,也就是说'once you created an index on attribute(s), repeating the same endureIndex will have no effect'