Рекомендации по проектированию облачных разделов - PullRequest
1 голос
/ 31 мая 2019

Я перевожу базу данных Cloudant без разделов в новую систему разделов Cloudant, чтобы снизить стоимость моей учетной записи в облаке ibm. Контекст можно резюмировать так:

  • Я имею дело с объектом электронной почты, который имеет название категории
  • Я мог бы получать более 100 новых записей (писем) в день
  • Пользовательский интерфейс может запрашивать электронные письма от даты A до даты B, а также по категориям C1, C2, ... C100 в любой возможной комбинации категорий.
  • Пользовательский интерфейс отображает только 15 электронных писем / страница

Речь идет о разделении такой модели данных и об избежании, насколько это возможно, глобальных запросов (перекрестных разделов), которые намного дороже, чем запросы на основе разделов.

Сначала я подумал, что пойду на разделение в день, но в итоге я могу оказаться в одной ситуации, когда запрос фильтрует сообщения электронной почты по определенной категории Cn за 4 месяца, но конкретная категория получает только 1 сообщение в день, что означает, что отобразить одну страницу в интерфейсе пользователя (из 15 электронных писем). Мне нужно выполнить 15 запросов, что недопустимо.

До появления разделов я просто выполнял глобальные запросы с помощью механизма запросов Lucene, но это уже не из-за стоимости.

Кроме того, я также подумал о том, чтобы поместить все электронные письма в один раздел, чтобы я мог использовать один и тот же старый запрос в этом разделе, и, поскольку это раздел, я бы не задавал цену глобального запроса, кроме запроса раздела цена. Это теоретически работает, но может иметь некоторые ограничения, так как в документации по разделам не рекомендуется помещать «слишком много данных» в один раздел.

Есть ли у вас какие-либо рекомендации для такого рода проблем?

Спасибо.

1 Ответ

1 голос
/ 04 июня 2019

Учитывая ваш дизайн, мне не кажется, что существует ключ раздела, который позволит вам полностью избежать глобальных запросов.Как правило, выберите ключ раздела, который позволит вам извлечь все данные, которые составляют логическую группу.Например, представьте систему заказов, в которой у вас есть набор клиентов со связанными заказами - очевидным ключом разделения будет уникальный идентификатор клиента: тогда у вас будет логическая группировка всех данных, связанных с каждым клиентом.

В блоге Cloudant есть хорошая серия статей о разделах:

https://blog.cloudant.com/2019/03/05/Partition-Databases-Data-Design.html

...