Вы должны использовать DynamoDB, потому что он имеет много полезных функций, таких как Восстановление во времени , транзакции , шифрование в покое и потоков активности , которых у SimpleDB нет.
Если вы работаете в небольшом масштабе, у DynamoDB есть преимущество, заключающееся в том, что он позволяет вам установить максимальную емкость для вашего стола, что означает, что вы можетеубедитесь, что вы остаетесь на свободном уровне.
Если вы работаете в большем масштабе, DynamoDB автоматически обрабатывает все разделы ваших данных (и имеет, для всех практических целей, неограниченную емкость), тогда как SimpleDB имеет ограничение в 10 ГБ на домен (он же «таблица»), и вам необходимо управлять любым горизонтальным разделением между доменами, которое вам может понадобиться.
Наконец, есть признаки того, что SimpleDBуже на пути к устареванию.Например, если вы посмотрите на заметки о выпуске SimpleDB , вы увидите, что последнее обновление было в 2011 году, тогда как у DynamoDB было несколько новых функций, анонсированных на последней конференции re: Invent.Кроме того, существует ряд постов Reddit (таких как здесь , здесь и здесь ), где общее согласие заключается в том, что SimpleDB уже устарела, и внекоторые потоки, Джефф Барр даже комментировали и не противоречили ни одному из утверждений о том, что SimpleDB устарела.
При этом в DynamoDB вы можете поддерживать желаемые запросы,Вам понадобятся два глобальных вторичных индекса , в которых используется составной ключ сортировки .Ваши запросы могут поддерживаться следующей схемой:
ID
- хеш-ключ вашей таблицы Author
- хеш-ключ Author-Status-CreatedDateTime-index
Category
- ключ хеша Category-Status-CreatedDateTime-index
Status
CreatedDateTime
UpdatedDateTime
Status-CreatedDateTime
- сортировкаключ Author-Status-CreatedDateTime-index
и Category-Status-CreatedDateTime-index
.Это составной атрибут, который существует для включения некоторых ваших запросов.Это просто значение Status
с символом-разделителем (я буду считать, что это #
для остальной части этого ответа) и CreatedDateTime
, добавленное в конец.(Личное мнение здесь: используйте ISO-8601 метки времени вместо меток времени unix. Это значительно упростит устранение неполадок.)
Используя эту схему, вы можете удовлетворить все ваши запросы.
запрос по идентификатору: Просто выполните запрос GetItem
для основной таблицы, используя идентификатор сообщения в блоге.
запроспо автору, разбит на страницы: Выполнить Query
на Author-Status-CreatedDateTime-index
с выражением условия ключа Author = :author
.
запрос по (Автор, Статус), отсортировано по CreatedDateTime, разбито на страницы: Выполните Query
для Author-Status-CreatedDateTime-index
с ключевым условным выражением Author = :author and begins_with(Status-CreatedDateTime, :status)
.Результаты будут возвращаться в порядке возрастания CreatedDateTime
.
запроса по (Категория, Статус), отсортированного по CreatedDateTime, с разбивкой по страницам: Выполнить Query
для Category-Status-CreatedDateTime-index
сключевое условие условия Author = :author and begins_with(Status-CreatedDateTime, :status)
.Результаты будут возвращены в порядке возрастания CreatedDateTime
.(Кроме того, если вы хотите получить все сообщения блога в категории «технологии» со статусом published
, созданные в 2019 году, вы можете использовать ключевое условие условия Category = "technology" and begins_with(Status-CreatedDateTime, "published#2019")
.
.Порядок сортировки результатов можно контролировать с помощью поля ScanIndexForward
запроса Query. По умолчанию используется true
(сортировка по возрастанию), но при установке значения false
DynamoDB будет возвращать результаты в порядке убывания.
DynamoDB имеет встроенную поддержку разбиения на страницы результатов операции Query. По сути, всякий раз, когда есть больше результатов, которые не были возвращены, ответ на запрос будет содержать lastEvaluatedKey
, который вы можете передать в свой следующий запрос, чтобы выбратьтам, где вы остановились. (См. Query Pagination для более подробной информации о том, как это работает.)
Onс другой стороны, если вы уже знакомы с SQL и хотите сделать это как можно проще для себя, рассмотрите возможность использования Aurora Serverless Data API .