Выбор ключа раздела в базе данных Azure Cosmos - PullRequest
0 голосов
/ 24 мая 2019

У меня есть куча документов.Сейчас только около 100 000.Но у меня могли быть миллионы.Каждый из этих документов имеет размер около 15 КБ.

В настоящий момент я вычисляю ключ разделения, чтобы получить поле идентификатора из Sql, для которого установлено значение автоинкремента на 1, и разделить это число на 1000. Iдумаю, что это не очень хорошая идея.

Иногда мне приходится очень сильно бить CosmosDB параллельными записями.Когда я делаю это, документы обычно имеют очень тесно сгруппированные идентификаторы SQL.Например, вот так:

12000
12004
12009
12045
12080
12090
12102

Как видите, все эти документы будут одновременно записываться в один и тот же раздел, поскольку все они будут иметь ключ раздела 12. И из документацииЯ читал, это не хорошо.Я должен распределить свои записи по разделам.

Я подумываю изменить это так, чтобы PartitionKey представлял собой Sql Id, деленный на 10000 плюс последняя цифра.Предполагая, что группа идентификаторов, записываемых в одно и то же время, распределяется случайным образом (что они в значительной степени являются).

Вот так:

(12045 / 10000).ToString() + (12045 % 10).ToString()

Это означает, учитывая мой список выше,ключи раздела были бы:

12000: 10
12004: 14
12009: 19
12045: 15
12080: 10
12090: 10
12102: 12

Вместо записи всех 7 в один раздел, все 7 будет записываться в разделы 10, 12, 14, 15 и 19 (всего 5).Приведет ли это к более быстрому времени записи?Как влияют на время чтения?Я правильно делаю?

Кроме того, лучше ли иметь первую часть ключа, которая будет Id / 1000 или Id / 1000000?Другими словами, лучше ли иметь много небольших разделов или я должен стремиться заполнить ограничение 10 ГБ для отдельных разделов?

1 Ответ

0 голосов
/ 24 мая 2019

Вы должны стремиться к равномерному распределению нагрузки между вашими разделами. 10 ГБ - это предел, вы не должны стремиться к достижению этого ограничения (потому что это будет означать, что вы больше не сможете добавлять документы в раздел).

Создание синтетического ключа раздела является допустимым способом равномерного распределения ваших документов между разделами. Вам нужно найти \ изобрести ключ, который бы соответствовал вашей схеме загрузки.

...