Получить последние N записей в таблице DynamoDB - программирование
Подтвердить что ты не робот

Получить последние N записей в таблице DynamoDB

Есть ли способ получить последние N записей из таблицы dynamodb. Ключ диапазона, который у меня есть, - это метка времени. Поэтому я мог бы использовать ScanIndex forward для упорядочения элементов в хронологическом порядке.

Но для запроса мне нужно иметь условие hashKey, которое я не хочу фильтровать. Любые мысли?

4b9b3361

Ответ 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 для этого. Не зная своего варианта использования с гораздо большей детализацией, трудно сделать точное предложение - насколько это масштабируемо? насколько это надежным? сколько обслуживания вы готовы выполнить? сколько вы готовы заплатить за это?

Обычно лучше использовать ограничение, знать свои ограничения и быть творческим.

Ответ 2

Я не уверен, что это все еще актуально. Я уверен, что вы можете использовать ScanIndexForward вместе с rangeKey, чтобы получить последнее значение.