Я новичок в игре с mongodb. В связи с тем, что я должен хранить + -50 млн документов, мне пришлось создать MongoDB осколок кластер с двумя наборами репликmongodb sharding - куски не имеют одинакового размера
документ выглядит следующим образом:
{
"_id" : "predefined_unique_id",
"appNr" : "abcde",
"modifiedDate" : ISODate("2016-09-16T13:00:57.000Z"),
"size" : NumberLong(803),
"crc32" : NumberLong(538462645)
}
Ключ осколка is appNr
(был выбран потому, что для удобства выполнения запроса все документы, имеющие одинаковые appNr
, должны оставаться в пределах одного фрагмента). Обычно несколько документов имеют одинаковые appNr
.
После загрузки, как два миллиона записей, я вижу ломти уравновешены, однако когда running db.my_collection.getShardDistribution()
, я получаю:
Shard rs0 at rs0/...
data : 733.97MiB docs : 5618348 chunks : 22
estimated data per chunk : 33.36MiB
estimated docs per chunk : 255379
Shard rs1 at rs1/...
data : 210.09MiB docs : 1734181 chunks : 19
estimated data per chunk : 11.05MiB
estimated docs per chunk : 91272
Totals
data : 944.07MiB docs : 7352529 chunks : 41
Shard rs0 contains 77.74% data, 76.41% docs in cluster, avg obj size on shard : 136B
Shard rs1 contains 22.25% data, 23.58% docs in cluster, avg obj size on shard : 127B
Мой вопрос, какие настройки я должен сделать для того, чтобы получить данные в равной степени распределены между осколками ? Я хотел бы понять, как данные разбиваются на куски. Я определил ключ дальнего порядка и размер блока 264.
Благодарим вас за ответ. Я уменьшил размер до 64, но это не помогло. Я решил проблему, воспользовавшись хэшированным ключом осколка и, подобно этому монго, позаботится о том, чтобы иметь более сбалансированные куски, которые заканчиваются более сбалансированным осколком. – DariusNica
@DariusNica - Отлично, он решил вашу проблему, мы говорим спасибо в stackoverflow, принимая ответ или повышая ответ :-) –