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

リストフィールドをMongoDBのシャードキーにすることはできますか?

    リストフィールドをシャードキーとして使用してシャーディングすることはできないと主張しているように思われるフィードバックの一部に基づいて、MongoDBの制限を使用してこのユースケースをシャーディングする方法を説明したいと思います:

    >

    元のオブジェクト:

    widget:
    {
        primary_key: '2389sdjsdafnlfda'
    
        categories: ['hair', 'nails', 'dress']
        colors:     ['red', 'white']
    
        #All the other fields in the document that don't need to be queried upon: 
        ...
        ...
    }
    

    データレイヤーは、シャードキー用に選択されたフィールドの要素数に基づいて、オブジェクトを複数のポインターオブジェクトに分割します。

    widget_pointer:
    {
        primary_key: '2389sdjsdafnlfda'
        categories: 'hair',
        colors:     ['red', 'white']
    }
    
    widget_pointer:
    {
        primary_key: '2389sdjsdafnlfda'
        categories: 'nails',
        colors:     ['red', 'white']
    }
    
    widget_pointer:
    {
        primary_key: '2389sdjsdafnlfda'
        categories: 'dress',
        colors:     ['red', 'white']
    }
    

    説明:

    • フィールドcategories これで、MongoDBのシャードキーになります。
    • これで、元のオブジェクトがKey-Valueストアに保存されます。 MongoDBのデータに対するクエリは、Key-Valueストアからオブジェクトを取得するために使用されるポインターオブジェクトを返します。
    • MongoDBデータのクエリは、1つのシャードにのみヒットします。
    • MongoDBデータへの挿入は、リスト内の要素と同じ数のシャードにヒットします。ほとんどの場合、シャードの総数のごく一部のみが影響を受けます。


    1. mongo.lockファイルの用途は何ですか?

    2. ハウツー:ユーザーにはファンがいます

    3. MongoDB:ネストされた配列をクエリする

    4. mongodbを使用したdjangoは、移行を過去のものにしますか?