Как избежать горячих разделов и при этом обеспечить необходимые шаблоны доступа - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать таблицу DynamoDB для многосайтовой CMS. Мне сложно определить первичные ключи, ключи разделов и сортировки для распределения данных по разделам и позволить мне делать запросы.

Пользователи смогут получать доступ только к публикациям в своем домене. Некоторые домены будут иметь гораздо больше сообщений, чем другие. Поскольку все запросы должны ограничивать результаты в зависимости от домена, как я могу равномерно распределить данные по разделам (как я понимаю, вы не можете выполнять запросы по разделам)?

Сначала я хотел использовать составнойКлюч раздела и begins-with для запроса:

Domain | Post-Type | Post-Year | Post-Month | Post-Day | slug

example.com / blog / 2019 / 09 / 30 / post-slug

Ключом сортировки будет предполагаемая дата.

Когдаэтот ключ раздела хэшируется, будет ли он хорошо распределяться? Большинство запросов будет для определенного домена и пост-типа, упорядоченных по дате. Есть ли лучший способ сделать это?

Заранее спасибо.

1 Ответ

2 голосов
/ 01 октября 2019

Схема NoSQL зависит от того, какие запросы вы собираетесь делать (в отличие от SQL, где пытаться максимально нормализовать его).

Таким образом, если ваш запрос будет «получить все сообщения из определенного домена», то простейшим подходом будет использование «домена» в качестве ключа хеша индекса (с меткой времени в качестве ключа сортировки). Как вы упомянули, это вызовет «горячие» разделы, поэтому нам нужно немного разделить «домен», как этот составной ключ «домен-год-месяц». Таким образом, мы гарантируем, что размер раздела не будет превышать 10 ГБ (текущий предел DynamoDB). Конечно, если у нас будет больше данных, нам нужно расширить их еще больше: «domain-year-dayOfYear» и так далее.

Таким образом, ваш образ мышления в основном правильный, но я бы не стал использовать «начинается с». Просто потому, что вы обычно не извлекаете такой большой объем данных, который распределен по нескольким разделам (увеличьте ваши разделы, если это так).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...