@andreas-jung は、それensure_index()
がラッパーであるという点で正しいですcreate_index()
。次のフレーズで混乱が生じると思います。
インデックスが PyMongo によって作成 (または保証) されると、ttl 秒間「記憶」されます。
インデックスが一時的または「一時的」であるということではありません。指定された秒数の間、ensure_index()
同じインデックスを再度作成しようとする呼び出しは何の効果もなく、その下では呼び出されませんがcreate_index()
、その後は「キャッシュ」されます。が期限切れにensure_index()
なるcreate_index()
と、 への呼び出しはその下で再び呼び出されます。
率直に言って、PyMongo のドキュメントはこれがどのように機能するかを説明するのにあまり適していないため、あなたの混乱は完全に理解できますが、Ruby docsに向かうと、説明が少し明確になります。
- (文字列) ensure_index(spec, opts = {})
create_index を呼び出し、フラグを設定して、さらに X 分間それを行わないようにします。この時間は、Mongo::DB オブジェクトを options[:cache_time] として初期化するときにオプションとして指定できます。インデックスへの変更は、キャッシュ時間に関係なく反映されます (インデックスの方向の変更など)。
このメソッドのパラメーターとオプションは、Collection#create_index と同じです。
例:
Call sequence:
Time t: @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and sets the 5 minute cache
Time t+2min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- doesn't do anything
Time t+3min : @posts.ensure_index([['something_else', Mongo::ASCENDING]) -- calls create_index and sets 5 minute cache
Time t+10min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and resets the 5 minute counter
ドライバーがまったく同じように機能すると主張しているわけではありません。説明のために、説明が少し良くなっているだけです。