Рекомендации по проектированию облачных разделов

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

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

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

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

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

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

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

Благодарю.

0 ответов

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

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

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

Другие вопросы по тегам