sql >> データベース >  >> NoSQL >> MongoDB

Pymongo / MongoDB:インデックスを作成しますか、それともインデックスを確保しますか?

    @andreas-jungはそのensure_index()にぴったりです create_index()のラッパーです 、私は次のフレーズで混乱が生じると思います:

    インデックスがPyMongoによって作成(または保証)されると、ttlsecondsの間「記憶」されます。

    インデックスが一時的または「一時的」であるということではありません。指定された秒数の間に、ensure_index()が呼び出されます。 同じインデックスを再度作成しようとすると、できません 効果があり、効果がない create_index()を呼び出す その下にありますが、その「キャッシュ」の有効期限が切れた後、ensure_index()を呼び出します。 します もう一度create_index()を呼び出します 下。

    率直に言って、PyMongoのドキュメントではこれがどのように機能するかを説明するのはあまり得意ではないため、混乱を完全に理解していますが、Rubyドキュメントにアクセスすると、説明が少し明確になります。

    • (文字列)ensure_index(spec、opts ={})

    create_indexを呼び出し、さらにX分間は再度行わないようにフラグを設定します。この時間は、Mongo ::DBobjectをオプションとして初期化するときにオプションとして指定できます[: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

    ドライバーがまったく同じように機能するとは言いませんが、説明のために、ドライバーの説明が少し優れているというだけです。



    1. ループバックでのMongoDBアグリゲーション

    2. 例外:BSONタイプEOOから日付に変換できません

    3. java-MongoDB+Solrのパフォーマンス

    4. セロリはピアによって接続をリセットします