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

mongodbのブールフラグにスパースインデックスを使用する必要がありますか?

    スパースフラグは少し奇妙です。いつ使用するかを理解するには、そもそも「スパース」が存在する理由を理解する必要があります。

    1つのフィールドに単純なインデックスを作成すると、そのフィールドがないドキュメントであっても、ドキュメントごとにエントリがあります。

    たとえば、{rarely_set_field : 1}にインデックスがある場合 、ほとんどがnullで埋められたインデックスが作成されます ほとんどの場合、そのフィールドは存在しないためです。これはスペースの無駄であり、検索するのは非効率的です。

    {sparse:true} オプションはnullを取り除きます 値なので、{rarely_set_field}の場合にのみエントリを含むインデックスを取得します 定義されています。

    ケースに戻ります。

    ブール値+スパースの使用について質問しています。ただし、スパースは実際には「ブール値」に影響を与えません。スパースは「設定されているか設定されていないか」に影響します。

    あなたの場合、unfinishedをフェッチしようとしています 。 sparseを活用するには 重要なのはブール値ではなく、unfinishedという事実です。 エントリにはそのキーがあり、その「終了した」エントリにはキーがまったくありません。

    { _id: 1, data: {...}, unfinished: true }
    { _id: 2, data: {...} } // this entry is finished
    

    キューを使用しているようです

    上記の情報を確実に活用して、スパースインデックスを実装できます。ただし、実際にはキューを使用しているように聞こえます。 MongoDBはキューとして使用できます。ここに、2つ

    ただし、キューを見ると、彼らはあなたがしているようにそれをしていません。私は個人的にMongoDBを一部の本番システムのキューとして使用しており、かなりうまく動作しますが、専用のキューの方がはるかにパフォーマンスが高いため、予想される負荷をテストしてください。



    1. mongoose node.js、$ltおよび$gtが機能しないクエリ

    2. 上記のMongoDB3.3.0でのQueryBuilderとBasicDBObjectBuilderの使用法

    3. MongoDB-タイムゾーンなしで日付を保存する

    4. node.jsメソッドのfindRandom()マングースが機能しないのはなぜですか?