Ответ 1
DynamoDB не предназначен для работы таким образом. Элементы распределяются в соответствии с хешем на HashKey таким образом, что порядок не предсказуем.
Ваши варианты включают:
- группировка элементов под одним хеш-ключом (не рекомендуется: вы перегружаете несколько серверов своими данными, а Amazon не может гарантировать вашу емкость чтения/записи)
- сканирование всей таблицы и сохранение N последних элементов (что-то вроде
for (item in items) { if (item newer then oldest accumulated item) accumulate item; }
); - разделите свою таблицу на несколько таблиц (т.е. вместо таблицы с именем
Events
создайте для сегодняшних событий событиеEvents20130705
,Events20130706
для событий завтрашнего дня) и сканируйте точно так же, как предыдущий вариант - таким образом ваши просмотры меньше
Возможно, вы также можете изменить свою модель данных. Например, у вас может быть одна версия, которая будет содержать ссылки на N самых последних элементов. Или у вас может быть что-то похожее на один счетчик, который вы бы увеличивали и обновляли N других записей под hashkeys, таких как недавние-K, где K - ваш счетчик mod N.
Возможно, вы могли бы использовать другой инструмент для этой работы. Например, у вас может быть сервер Redis для этого. Не зная своего варианта использования с гораздо большей детализацией, трудно сделать точное предложение - насколько это масштабируемо? насколько это надежным? сколько обслуживания вы готовы выполнить? сколько вы готовы заплатить за это?
Обычно лучше использовать ограничение, знать свои ограничения и быть творческим.