1

MongoDB でシャーディングをテストしようとしています。たとえば、実際のサーバー名の代わりに host1.com と host2.com を使用します。

そこで、host1.com に構成サーバーを作成しました。

mongod --dbpath /path/to/configdb/ --configsvr

mongos同じマシンで開始:

mongos --configdb host1.com --port 27020

mongod2 台のマシン (host1.com と host2.com) で開始します。

mongod --dbpath /path/to/test_shard_db/ --shardsvr

チュートリアル で説明されているように、シャードを追加し、シャード キー {'name': 1} (コレクションにはこのフィールドとテスト用のみがあります) を使用してデータベースtestとコレクションのシャーディングを有効にしました。しかし、このすべての操作の後、すべてのデータは、データベースのプライマリである 1 つのシャードにのみ書き込まれます。test_id

構成は次のとおりです。

シャーディング ステータス:

mongos> db.printShardingStatus()
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
    {  "_id" : "shard0000",  "host" : "host1.com:27018",  "maxSize" : NumberLong(1) }
    {  "_id" : "shard0001",  "host" : "host2.com:27018",  "maxSize" : NumberLong(10) }
  databases:
        ...
    {  "_id" : "test",  "partitioned" : true,  "primary" : "shard0000" }
        test.test chunks:
                shard0001   1
            { "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on : shard0001 Timestamp(1000, 0)

コレクション統計:

mongos> db.printCollectionStats()
test
{
    "sharded" : false,
    "primary" : "shard0000",
    "size" : 203535788,
    ...
}

バランサーの状態:

mongos> sh.isBalancerRunning()
true

では、1 メガバイトを超えるデータを追加したにもかかわらず、コレクション内のすべてのデータが 1 つのシャードにしか存在しないのはなぜでしょうか? そして、なぜそのデータベースdb.printCollectionStats()を見せてください。私は何を間違えましたか?test"sharded" : false

4

1 に答える 1

3

デフォルトのチャンク サイズは 64MB であるため、分割が発生する前に拡大する余地があります。シャード キーの範囲を事前に分割して、最初から複数のシャードに書き込みを行うことができます。詳細については、MongoDB 分割チャンクのドキュメントを参照してください。

チャンク サイズと maxSize の違いについて:

maxSize は、特定のシャードのデータ量を制限します。到達すると、バランサーはチャンクを maxSize に達していないシャードに移動しようとします。チャンクは、すべてがシャード キー範囲のセクションに含まれるドキュメントのコレクションです。MongoDB バランサーは、チャンク レベルでシャード間でデータを移動してバランスを取ります。チャンクが maxSize 値に近づくと、2 つに分割され、移動が発生する可能性があります。

于 2013-04-04T15:06:24.607 に答える