У меня есть куча документов.Сейчас только около 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 ГБ для отдельных разделов?