Я создал кластер монгодб с двумя осколками. Затем я создал коллекцию с разбивкой по диапазону и вставил 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 МБ, просто чтобы поэкспериментировать с шардированием. Спасибо