, как описано в https://aws.amazon.com/blogs/database/choosing-the-right-dynamodb-partition-key/, ключ раздела должен быть уникальным.
Я создаю приложение, которое должно хранить подписки на тему (например, приложение для чата).Миллионы этих подписок должны быть сохранены в базе данных, и когда сообщение отправляется подписчикам, приложению необходимо получить всех подписчиков из таблицы.
Наивный подход
Наивным подходом было бы создание первичного ключа, такого как:
SUBSCRIPTIONS|<topic>
После этого ключ сортировки упорядочит все подписки для <topic>
по времени подписки,регион и несколько других критериев.
К сожалению, ключ раздела далеко не уникален, но позволяет мгновенно получить все подписки.
Кроме того, учитывая, что максимальный размер таблицы устанавливает жесткий пределк количеству подписок, которые могут быть проведены в разделе, и, следовательно, к максимальному количеству подписок в целом для этого дизайна.Таким образом, это предназначено для отказа масштабируемости.
Альтернатива
Другой способ его разработки - использовать что-то вроде
SUBSCRIPTIONS|<clientId>
для удержания каждого икаждую подписку отдельно для каждого клиента и переместите <topic>
в клавишу сортировки.Это позволило бы гораздо лучше масштабировать таблицу (разбиение на разделы), но потребовалось бы сканирование, чтобы найти всех подписчиков для определенного <topic>
.
. Здесь может помочь индекс, но как индекс масштабируется по нескольким разделам?и как он будет работать?