Масштабируемость DynamoDB: как спроектировать ключ партиции против индекса - PullRequest
0 голосов
/ 23 февраля 2019

, как описано в https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/, ключ раздела должен быть уникальным.

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

Наивный подход

Наивным подходом было бы создание первичного ключа, такого как:

SUBSCRIPTIONS|<topic>

После этого ключ сортировки упорядочит все подписки для <topic> по времени подписки,регион и несколько других критериев.

К сожалению, ключ раздела далеко не уникален, но позволяет мгновенно получить все подписки.

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

Альтернатива

Другой способ его разработки - использовать что-то вроде

SUBSCRIPTIONS|<clientId>

для удержания каждого икаждую подписку отдельно для каждого клиента и переместите <topic> в клавишу сортировки.Это позволило бы гораздо лучше масштабировать таблицу (разбиение на разделы), но потребовалось бы сканирование, чтобы найти всех подписчиков для определенного <topic>.

. Здесь может помочь индекс, но как индекс масштабируется по нескольким разделам?и как он будет работать?

...