Выбор ключа разделения, если у сообщения нет права на диверсификацию документов - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть одно приложение, которое отправляет сообщения в базу данных Cosmos путем чтения сообщений из базы данных другого приложения. Единственная информация, которую я могу получить из другого приложения, - это documentId, то есть первичный ключ из базы данных приложения и тело сообщения. Структура выглядит примерно так:

{
   "id":<documentid>,
   "body":<body picked up from App>,
   "Timestamp":<today's date time>
}

Тело содержит простое текстовое сообщение, типа «Привет, мир! Сегодня среда». У меня есть следующие требования: 1. Необходимо запросить документ по documentId. 2. Необходимо запрашивать документы между двумя метками даты / времени.

  • DocumentId уникален и повторяющиеся значения не допускаются.

В этом сценарии, как мы можем определить ключ раздела для контейнера, чтобы легко получать документы по двум указанным выше критериям?

Любые входные данные высоко ценятся.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

На вашем месте я бы вынул некоторую часть временной метки в виде строки и использовал бы ее в качестве ключа раздела. Например, если отметка времени «15.04.2020 13:20», создайте новое свойство со значением «15.04.2020» и сделайте это новое свойство ключом раздела. Это будет гарантировать, что у вас будет 20 миллионов сообщений в каждом разделение. У вас не возникнет проблем при выборе данных по идентификатору. Если вам нужно выполнить поиск по дате, вы узнаете, что такое ключ раздела, поскольку он зависит от метки времени. Единственная проблема, которую я вижу, - это если вам нужно получить данные в диапазоне дат , вам нужно поразить несколько разделов. Проверьте мой пост о синтетических c ключах разделов. https://h-savran.blogspot.com/2019/08/synthetic-partition-keys-in-azure.html Надеюсь, это поможет!

0 голосов
/ 03 апреля 2020

Для запроса по идентификатору: если вы знаете идентификатор, вы можете выполнить прямое чтение (против запроса). Это требует знания как идентификатора, так и ключа раздела; если это ваш основной метод поиска, вы можете установить ключ разделения на /id, и это станет самым простым подходом (и наименее дорогим с точки зрения RU).

Для запроса между временными метками: Вы ' Вам нужно будет переосмыслить разбиение, так как вы в конечном итоге будете выполнять запросы между разделами, если будете использовать /id в качестве ключа разделения. На самом деле нет «правильного» ответа на эту часть, поскольку мы просто недостаточно знаем о вашем приложении и шаблонах запросов (или объеме данных с точки зрения скорости транзакций, размера и т. Д. c). Просто знайте, что если вы разбиваете данные на части, в идеале вы захотите ограничить количество запросов одним логическим разделом; в противном случае вам нужно будет выполнять запросы между разделами, которые будут стоить больше RU.

...