Amazon SimpleDB и DynamoDB для хранения сообщений в блоге - PullRequest
3 голосов
/ 20 мая 2019

Рассмотрим простую схему сообщений блога, в которой есть следующие столбцы

ID 
Author 
Category 
Status 
CreatedDateTime
UpdatedDateTime

Итак, предположим, что следующие запросы

  • запрос по идентификатору
  • запрос по автору, разбит на страницы
  • запрос (Автор, Статус), отсортировано по CreatedDateTime, разбит на страницы
  • запрос по (Категория, Статус), отсортированный по CreatedDateTime, разбит на страницы

Так что, кажется, без особых усилий, SimpleDB будет проще реализовать коды?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

SimpleDB больше не поддерживается AWS - вы даже не можете найти его в консоли AWS, поэтому, хотя он может работать для вас, лично я бы выбрал DynamoDB и DocumentDB (если вы хотите NoSQL) - не надо Не думаю, что на этом этапе есть какая-либо причина начать новый проект на таком старом предложении.

1 голос
/ 31 мая 2019

Вы должны использовать 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 .

...