Почему хешированные ключи осколков создают куски на каждом осколке в mongodb - PullRequest
0 голосов
/ 27 февраля 2019

Когда я использовал хешированный ключ шарда, все мои шарды уже разделяются на куски перед добавлением каких-либо данных, как в примере вывода из sh.status () ниже.

sample.test
    shard key: { "sampleId" : "hashed" }
    unique: false
    balancing: true
    chunks:
            shard001    2
            shard002    2
    { "sampleId" : { "$minKey" : 1 } } -->> { "sampleId" : NumberLong("-4611686018427387902") } on : shard001 Timestamp(1, 0) 
    { "sampleId" : NumberLong("-4611686018427387902") } -->> { "sampleId" : NumberLong(0) } on : shard001 Timestamp(1, 1) 
    { "sampleId" : NumberLong(0) } -->> { "sampleId" : NumberLong("4611686018427387902") } on : shard002 Timestamp(1, 2) 
    { "sampleId" : NumberLong("4611686018427387902") } -->> { "sampleId" : { "$maxKey" : 1 } } on : shard002 Timestamp(1, 3) 

Теперь, когда используется составной ключ или неблокированный ключ и выполняется sh.status (), я вижу только один из моих осколков, содержащий 1 кусок.Теперь я должен заполнить его до максимума 64 МБ, чтобы создать второй блок.В приведенном ниже примере у меня есть shard002 и shard001.

sample.test
    shard key: { "sampleId" : 1, "uid" : 1 }
    unique: false
    balancing: true
    chunks:
            shard002    1
    { "sampleId" : { "$minKey" : 1 }, "uid" : { "$minKey" : 1 } } -->> { "sampleId" : { "$maxKey" : 1 }, "uid" : { "$maxKey" : 1 } } on : shard002 Timestamp(1, 0)

Итак, мой вопрос: почему порции генерируются, когда нет данных при использовании хешированного ключа шарда?

1 Ответ

0 голосов
/ 27 февраля 2019

Это реальное поведение Hashed Sharding.

Осколок пустой коллекции

Согласно документации mongodb

Если выосколок пустой коллекции с использованием хешированного ключа осколка:

Без указания зон и диапазонов зон для пустой или несуществующей коллекции: операция осколки создает пустые чанки для охвата всего диапазона значений ключа осколка и выполняетначальное распределение чанка.По умолчанию операция создает 2 фрагмента для каждого сегмента и перемещается по кластеру.Вы можете использовать опцию numInitialChunks, чтобы указать другое количество начальных чанков.Это первоначальное создание и распределение фрагментов позволяет быстрее настроить разбиение.После первоначального распределения балансировщик управляет распределением порций в дальнейшем.

...