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

MongoDBでインデックスの方向が重要なのはなぜですか?

    MongoDBは、何らかの方法で複合キーを連結し、それをBTreeのキーとして使用します。

    単一のアイテムを見つける場合 -ツリー内のノードの順序は関係ありません。

    ノードの範囲を返す場合 -互いに近い要素は、ツリーの同じ枝の下にあります。ノードが範囲内に近いほど、ノードをすばやく取得できます。

    単一のフィールドインデックスを使用 -順序は関係ありません。昇順で接近している場合は、降順でも接近します。

    複合キーをお持ちの場合 -順序が重要になり始めます。

    たとえば、キーがA昇順B昇順の場合、インデックスは次のようになります。

    Row   A B
    1     1 1
    2     2 6
    3     2 7 
    4     3 4
    5     3 5
    6     3 6
    7     5 1
    

    Aが昇順でBが降順のクエリは、行を返すためにインデックスを順不同でジャンプする必要があり、速度が低下します。たとえば、行1, 3, 2, 6, 5, 4, 7を返します。

    インデックスと同じ順序の範囲クエリは、行を正しい順序で順番に返すだけです。

    BTreeでレコードを見つけるには、O(Log(n))時間がかかります。レコードの範囲を順番に見つけるのは、OLog(n)+ kのみです。ここで、kは返されるレコードの数です。

    レコードが故障している場合、コストはOLog(n)* k

    と同じくらい高くなる可能性があります。

    1. 投影が検索クエリで機能しない

    2. SCUMM:ClusterControlのエージェントベースのデータベース監視インフラストラクチャ

    3. nginx uwsgi websockets 502アップストリームから応答ヘッダーを読み取っているときに、不正なゲートウェイアップストリームの接続が途中で閉じられました

    4. ハウツー:ApacheHBaseでユーザー認証と承認を有効にする