MongoDB неравномерное разбиение документов - и миграция Windows - PullRequest
0 голосов
/ 29 сентября 2019

Я создал кластер монгодб с двумя осколками. Затем я создал коллекцию с разбивкой по диапазону и вставил 10000 документов со случайными документами со случайными значениями для ключа с использованием Java. По какой-то причине сразу после вставки фрагменты равномерно распределяются между осколками, однако количество документов не распределяется.

Это то, что я вижу сразу после вставки 10000 документов (в дополнение к существующим 2документы)


Shard shard0000 at 127.0.0.1:27017
 data : 2.65MiB docs : 4402 chunks : 7
 estimated data per chunk : 387KiB
 estimated docs per chunk : 628

Shard shard0001 at 127.0.0.1:27018
 data : 6.02MiB docs : 10002 chunks : 8
 estimated data per chunk : 770KiB
 estimated docs per chunk : 1250

Totals
 data : 8.67MiB docs : 14404 chunks : 15
 Shard shard0000 contains 30.57% data, 30.56% docs in cluster, avg obj size on shard : 631B
 Shard shard0001 contains 69.42% data, 69.43% docs in cluster, avg obj size on shard : 631B

Сначала я не понимаю, почему я вижу 14 404 документа вместо 10 000, которые я вставил.

К моему удивлению, на следующий день я прихожу и запускаю "` `db.myCollection.getShardDistribution () ``, и вдруг я вижу совершенно другую картину. Данные внезапно стали хорошо распределенными.

Итак, я начал экспериментировать и обнаружил, что если я запускаю следующие команды:

use config 
db.settings.update(
   { _id: "balancer" },
   { $set: { activeWindow : { start : "11:06", stop : "11:07" } } },
   { upsert: true }
)

И ждем, пока это временное окно для передачи данных внезапно приведет кsense:

mongos> db.myCollection.getShardDistribution()

Shard shard0000 at 127.0.0.1:27017
 data : 2.65MiB docs : 4402 chunks : 7
 estimated data per chunk : 387KiB
 estimated docs per chunk : 628

Shard shard0001 at 127.0.0.1:27018
 data : 3.36MiB docs : 5600 chunks : 8
 estimated data per chunk : 431KiB
 estimated docs per chunk : 700

Totals
 data : 6.02MiB docs : 10002 chunks : 15
 Shard shard0000 contains 44.03% data, 44.01% docs in cluster, avg obj size on shard : 631B
 Shard shard0001 contains 55.96% data, 55.98% docs in cluster, avg obj size on shard : 630B

В моем коде Java, который вставляет 10000 документов, все, что я делаю, это генерирует 10 000 объектов Document и в конце запускает insertMany(documents).

  List<Document> documents = new ArrayList<>();

  for (int i = 0; i < 10000; i++) {
     Document document = new Document();
     document.append("name", generateName())
                    ...
     documents.add(document);
  }

  collection.insertMany(documents);

Так что же здесь происходит?

Примечание: я установил максимальный размер куска в 1 МБ, просто чтобы поэкспериментировать с шардированием. Спасибо

...