1

次のように 2 つのシャードを追加しました。

  shards:
        {  "_id" : "rs0",  "host" : "rs0/serv1:27017,serv2:27017,serv3:27017" }
        {  "_id" : "rs1",  "host" : "rs1/serv3:27017,serv4:27017,serv5:27017" }

コレクションの投稿を次のように分割しました。

データベース:

{  "_id" : "mypost",  "partitioned" : true,  "primary" : "rs0" }

             mypost.posts
                        shard key: { "_id" : "hashed" }
                        chunks:
                                rs0    2
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong(0) } on : rs0 Timestamp(1, 0)
                        { "_id" : NumberLong(0) } -->> { "_id" : { "$maxKey" : 1 } } on : rs0 Timestamp(1, 1)

私の質問は、_id でハッシュ化されたキーを使用し、34MB のデータを挿入したにもかかわらず、データが常にシャード 1 からのみフェッチされ、チャンクがシャード 2 に移動されない理由です。

私がする時

db.posts.find().explain() i get:

{
        "clusteredType" : "ParallelSort",
        "shards" : {
                "rs0/serv1:27017,serv2:27017,serv3:27017" : [
                        {
                                "cursor" : "BasicCursor",
                                "isMultiKey" : false,
                                "n" : 1000,
                                "nscannedObjects" : 1000,
                                "nscanned" : 1000,
                                "nscannedObjectsAllPlans" : 1000,
                                "nscannedAllPlans" : 1000,
                                "scanAndOrder" : false,
                                "indexOnly" : false,
                                "nYields" : 0,
                                "nChunkSkips" : 0,
                                "millis" : 4,
                                "indexBounds" : {

                                },
                                "server" : "serv1:27017"
                        }
                ]
        },
        "cursor" : "BasicCursor",
        "n" : 1000,
        "nChunkSkips" : 0,
        "nYields" : 0,
        "nscanned" : 1000,
        "nscannedAllPlans" : 1000,
        "nscannedObjects" : 1000,
        "nscannedObjectsAllPlans" : 1000,
        "millisShardTotal" : 4,
        "millisShardAvg" : 4,
        "numQueries" : 1,
        "numShards" : 1,
        "indexBounds" : {

        },
        "millis" : 5
}

データを両方のシャードに自動的に送信するにはどうすればよいですか?

sh.status()

  sharding version: {
        "_id" : 1,
        "version" : 3,
        "minCompatibleVersion" : 3,
        "currentVersion" : 4,
        "clusterId" : ObjectId("50fde9a8552b8ce5c47c8ead")
}
  shards:
        {  "_id" : "rs0",  "host" : "rs0/serv1:27017,serv2:27017,serv3:27017" }
        {  "_id" : "rs1",  "host" : "rs1/serv4:27017,serv5:27017,serv6:27017" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
        {  "_id" : "myposts",  "partitioned" : true,  "primary" : "rs0" }
                myposts.posts
                        shard key: { "_id" : "hashed" }
                        chunks:
                                rs0    1
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : rs0 Timestamp(1, 0)

コレクション削除後の状態---------------------

{  "_id" : "myposts",  "partitioned" : true,  "primary" : "rs0" }
                myposts.posts
                        shard key: { "_id" : "hashed" }
                        chunks:
                                rs0    2
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong(0) } on : rs0 Timestamp(1, 0)
                        { "_id" : NumberLong(0) } -->> { "_id" : { "$maxKey" : 1 } } on : rs0 Timestamp(1, 1)
4

1 に答える 1

0

Sharding Mechanicsのドキュメント (mongodb 2.2 以降の場合) を見ると、チャンクが 20 未満の場合、バランサーがチャンクを移動するには不均衡を 2 にする必要があることがわかります。

チャンクが 4 つ以上になるまで、チャンクのバランスを取ることは期待できません。

定義されているチャンクが非常に少ないのには理由がありますか?それとも、バランサーのスライスとダイスを行うのに十分なデータがロールインするのを待つつもりですか?

于 2015-08-31T14:33:01.480 に答える