Количество запрашиваемых документов не равно количеству вставленных документов при использовании ключа шарда на основе диапазона - PullRequest
0 голосов
/ 04 апреля 2020

Я построил кластер с 3 осколками. Когда я тестировал ключ сегментированного ранга, я столкнулся с некоторыми проблемами.

Перед тестированием ключа шарда я изменил размер фрагмента:

mongos> use config
switched to db config
mongos> db.settings.save({_id: "chunksize", value: 2})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
mongos> db.settings.find({_id: "chunksize"})
{ "_id" : "chunksize", "value" : 2 }
mongos>

Затем я включил функцию сегментирования теста база данных:

mongos> use admin
switched to db admin
mongos> db.runCommand({enablesharding: "test"})
{
        "ok" : 1,
        "operationTime" : Timestamp(1585978927, 7),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1585978927, 7),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos> db.runCommand({shardcollection: "test.ranged", key: {"age": 1}})
{
        "collectionsharded" : "test.ranged",
        "collectionUUID" : UUID("5403b4c2-6669-4918-a7eb-d210bdad2271"),
        "ok" : 1,
        "operationTime" : Timestamp(1585978927, 22),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1585978927, 22),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos>

Затем я попытался запустить 100 000 запросов на вставку на сервер mongos.

mongos> use test
switched to db test
mongos> for (var i = 1; i <= 100000; i++) db.ranged.save({"age": NumberInt(i % 100), "createTime": new Date()});
WriteResult({ "nInserted" : 1 })
mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5e8804c5bdf39b10a00d82cf")
  }
  shards:
        {  "_id" : "shard1",  "host" : "shard1/10.251.1.231:27018,10.251.1.232:27018",  "state" : 1 }
        {  "_id" : "shard2",  "host" : "shard2/10.251.1.232:27019,10.251.1.233:27019",  "state" : 1 }
        {  "_id" : "shard3",  "host" : "shard3/10.251.1.231:27020,10.251.1.233:27020",  "state" : 1 }
  active mongoses:
        "4.2.5" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                7 : Success
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                shard1  1
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard1 Timestamp(1, 0)
        {  "_id" : "test",  "primary" : "shard1",  "partitioned" : true,  "version" : {  "uuid" : UUID("6ed79961-a6c3-46c8-bbbe-dba074d782f5"),  "lastMod" : 1 } }
                test.ranged
                        shard key: { "age" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                shard1  1
                                shard2  2
                                shard3  2
                        { "age" : { "$minKey" : 1 } } -->> { "age" : 0 } on : shard2 Timestamp(2, 0)
                        { "age" : 0 } -->> { "age" : 44 } on : shard2 Timestamp(4, 0)
                        { "age" : 44 } -->> { "age" : 88 } on : shard3 Timestamp(4, 1)
                        { "age" : 88 } -->> { "age" : 99 } on : shard3 Timestamp(3, 4)
                        { "age" : 99 } -->> { "age" : { "$maxKey" : 1 } } on : shard1 Timestamp(3, 1)

mongos>

Вопрос в том, почему количество запрашиваемых документов не равно количеству вставленных документов. Это то, что я неправильно понял ключ осколка дальнего боя? Я надеюсь, что кто-то ответит на мои сомнения. Большое спасибо.

mongos> db.ranged.find({}).count()
166803
mongos>
...