Ответ 1
DynamoDB получает свойства масштабирования, разделяя ключи между несколькими серверами. Это похоже на то, как масштабируются другие распределенные базы данных, такие как Cassandra и HBase. В то время как вы можете увеличить пропускную способность на DynamoDB, которая просто перемещает ваши данные на несколько серверов, и теперь каждый сервер может обрабатывать общее количество одновременных подключений/количество серверов. Посмотрите на их FAQ для объяснения того, как достичь максимальной пропускной способности:
В: Всегда ли я смогу достичь своего уровня пропускной способности?
Amazon DynamoDB предполагает относительно случайный доступ ко всем первичным ключам. Вы должны настроить модель данных так, чтобы ваши запросы приводили к довольно равномерному распределению трафика по первичным ключам. Если у вас очень неравномерный или искаженный шаблон доступа, вы не сможете достичь своего уровня подготовленной пропускной способности.
При хранении данных Amazon DynamoDB делит таблицу на несколько разделов и распределяет данные на основе элемента хеш-ключа первичного ключа. Предоставленная пропускная способность, связанная с таблицей, также делится между разделами; Пропускная способность каждого раздела управляется независимо на основе выделенной ему квоты. Нет разделения выделенной пропускной способности между разделами. Следовательно, таблица в Amazon DynamoDB лучше всего может соответствовать выделенным уровням пропускной способности, если рабочая нагрузка распределена довольно равномерно по значениям хеш-ключа. Распределение запросов по значениям хеш-ключей распределяет запросы по разделам, что помогает достичь полного уровня пропускной способности.
Если у вас неравномерная структура рабочей нагрузки по первичным ключам и вы не можете достичь своего уровня пропускной способности, вы можете удовлетворить свои потребности в пропускной способности, дополнительно увеличив уровень подготовленной пропускной способности, что увеличит пропускную способность для каждого раздела. Тем не менее, рекомендуется рассмотреть возможность изменения шаблона запроса или модели данных для достижения относительно произвольного доступа к первичным ключам.
Это означает, что наличие одного ключа, который увеличивается напрямую, не будет масштабироваться, поскольку этот ключ должен находиться на одном сервере. Существуют и другие способы решения этой проблемы, например, при агрегации памяти с инкрементом сброса в DynamoDB (хотя это может привести к проблемам с надежностью) или счетчиком с разделением на сегменты, где приращения распределяются по нескольким ключам и считываются путем вытягивания всех ключей из сегментированного счетчик (http://whynosql.com/scaling-distributed-counters/).