Pymongo / MongoDB:创建索引还是确保索引?
|
我不明白pymongo中
create_index
和ensure_index
之间的区别。在MongoDB索引页面上,它说
您可以通过调用
ensureIndex()
但是在pymongo中,有两个不同的命令create_index
和ensure_index
,并且create index的文档具有:
与create_index()不同,后者尝试
无条件创建索引,
sure_index()利用了一些
在驱动程序内进行缓存
只尝试创建索引
可能不存在。当索引
由PyMongo创建(或确保)
被“记住” ttl秒。
重复调用sure_index()
在此期限内
轻巧-他们不会尝试
实际创建索引。
我理解understanding1将创建一个永久索引是正确的,还是我需要为此使用create_index
?
没有找到相关结果
已邀请:
5 个回复
鞘垒飘
。
填盖
是
的包装,我认为这句话会引起混淆: 创建(或确保)索引时 被PyMongo记住是ttl 秒。 并不是索引是临时的或“瞬态的”,而是在指定的秒数内,调用
试图再次创建相同的索引不会产生任何效果,也不会在下面调用
,但是在\“ cache \”过期后,对
的调用将再次在下面调用
。 我完全理解您的困惑,因为坦率地说,PyMongo的文档在解释其工作原理方面做得不好,但是如果您使用Ruby文档,则说明会更加清晰: (字符串)sure_index(spec,opts = {}) 调用create_index并将标志设置为 再过X分钟就不再这样做。 这次可以指定为 Mongo :: DB初始化时的选项 对象作为选项[:cache_time]任何 索引更改将被传播 不管缓存时间如何 (例如,更改索引方向) 为此的参数和选项 方法与用于 集合#create_index。 例子:
我并不是说驱动程序的工作原理完全相同,只是出于说明目的,对它们的解释有些恕我直言。
眠皇
方法和python驱动程序中的
是不同的东西。 python驱动程序中的
和
方法均会永久创建一个索引。 在这种情况下,也许有人会使用带有合理TTL的
,因为我不确定每次调用
是否会重新创建索引。通常情况下,休闲娱乐是不希望的,并且可能会很麻烦。但是,即使TTL过期,从其他客户端实例调用它或重新启动后,即使是python或ruby驱动程序的
也可以重新创建索引。我对此不确定。 甚至更好的可能性是,使用
方法首先检查索引是否已存在。如果已经存在,则不会再次创建。 我现在演示如何将术语“ 1”(或“ 19”)用于两种不同的含义: 1)如果数据库中尚不存在索引,则会创建一个索引 这是Interactive Shell方法
的作用: http://www.mongodb.org/display/DOCS/Indexes#Indexes-Basics
的行为也是如此: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js (在文件
中搜索
。) 2)如果不在“驱动程序缓存”中,则会创建一个索引 此处使用相同的标识符具有不同的含义,这使我感到困惑。 python和ruby驱动程序将有关最近创建的索引的信息存储在内存中,他们称此行为为'caching \'。 他们不告诉数据库有关此缓存的信息。 这种机制的结果是,如果您第一次使用TTL值(生存时间)调用
或
,则驱动程序将在数据库中插入索引,并将记住该插入并将TTL信息存储在内存中。这里缓存的是时间和时间索引。 下次在同一驱动程序实例上用相同集合的相同索引调用
时,如果自首次调用以来尚未经过TTL秒,则
命令将仅再次插入索引。 如果您呼叫
,则无论从第一次呼叫以来经过了多长时间,当然也将是首次呼叫,都将始终插入索引。 这是python驱动程序,在文件
中搜索
: https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/collection.py 然后在ruby驱动程序中,在文件
中搜索
: https://github.com/mongodb/mongo-ruby-driver/blob/master/lib/mongo/collection.rb (请注意,不同的客户端实例不知道其他客户端的缓存,该信息仅保留在内存中,并且是每个实例的信息。如果重新启动客户端应用程序,则新实例不知道旧的“ cached”索引插入。其他客户也不知道,他们彼此不告诉对方。) 我还不能完全理解,当python驱动程序或ruby驱动程序插入已经存在的索引时,db中会发生什么。我怀疑它们在这种情况下什么也不做,这更有意义,并且也与
和JS驱动程序的行为匹配。
扫窟
春驹晴陪