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

Mongoで各シャードのシャーディング範囲を定義するにはどうすればよいですか?

    あなたはできる。チャンクを手動で事前分割することは可能です。これについては、次のように説明されています: http://www。 mongodb.org/display/DOCS/Splitting+Chunks

    チャンクをどのように分割するかを慎重に検討してください。うまくやらないと、パフォーマンスの問題がたくさん発生する可能性がありますが、キーについて十分に理解していれば、多くの問題が発生する可能性があります。

    これを行う場合は、おそらくバランサーをオフにする必要があります:

    > use config
    > db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
    

    (これはここで説明されています: http://www.mongodb.org/display/DOCS / Sharding + Administration

    これはあなたがそれを行う方法の例です。正確に何をしたいかに応じて、それを変更する必要があります(シャードキーの名前はxではないと思います) たとえば、範囲は-1000〜2000ではありません。

    > use admin
    > db.runCommand({split: "my_db.my_coll", middle: {x: 0}})
    > db.runCommand({split: "my_db.my_coll", middle: {x: 1000}})
    > db.runCommand({movechunk: "my_db.my_coll", find: {x:   -1}, to: "shard_1_name"})
    > db.runCommand({movechunk: "my_db.my_coll", find: {x:    0}, to: "shard_2_name"})
    > db.runCommand({movechunk: "my_db.my_coll", find: {x: 1000}, to: "shard_3_name"})
    

    split コマンドはチャンクを作成します。各コマンドは、中央の値を含むチャンクを2つに分割するため、最初のコマンドは、min_value -> max_valueを含むチャンクを分割します。 min_value -> 0に および0 -> max_value 。次に、2番目のコマンドは、前のコマンドによって作成された2番目のチャンクである1000を含むチャンクを、2つの新しいチャンクに分割します。そのコマンドの後に、3つのチャンクがあります:

    • min_value -> 0
    • 0 -> 1000
    • 1000 -> max_value

    次の3つのコマンドは、これらのチャンクを別々のシャードに移動します。ドキュメントによると、コマンドはfindの値を含むチャンクを移動します 、そこで、異なるチャンクにあることがわかっている3つの値を選択し、これらを使用しました(BSONにはmin_keyの記号があります) およびmax_key 、しかし、このコンテキストで適切に使用する方法がわかりません。

    このページもお読みください http://www.mongodb.org/display/DOCS/Moving +チャンク




    1. MongoDBには、更新データに含まれていない既存の要素を削除せずにドキュメントを更新する方法がありますか?

    2. MongoDB:DBcollectionfindを使用する場合のデータの並べ替え

    3. redisデータベースのHSETメソッドとHMSETメソッドの違いは何ですか

    4. ターンベースのマルチプレイヤーiPhoneボードゲーム用にDB&APIサーバーをどのように設計する必要がありますか? (nodejs、mongo、couchなどについて考えます)