DynamoDB: получение только самых последних элементов всех уникальных хеш-ключей - PullRequest
0 голосов
/ 03 сентября 2018

Имеется таблица DynamoDB с ключом секционирования id и ключом сортировки date_epoch.

У меня будут такие вещи:

id  |  date_epoch
-----------------
1   |  1535961978
2   |  1535961996
1   |  1535962033
2   |  1535962055
3   |  1535962064
5   |  1535962073
1   |  1535962080
2   |  1535962085

Для каждого данного уникального id я хочу только его самый последний элемент. Так что из этого примера данных я хочу только следующие результаты:

id  |  date_epoch
-----------------
3   |  1535962064
5   |  1535962073
1   |  1535962080
2   |  1535962085

Я могу понять, как это сделать с очень уродливым кодом. Я получил каждый уникальный id, затем прошел итерацию по каждому индивидуальному id и получил только самые последние элементы .withScanIndexForward(false) и .withMaxResultSize(1) (как показано в в этом примере и в этом примере ), но, похоже, должен быть лучший способ сделать это.

Можем ли мы установить фильтр сканирования, чтобы ограничить максимальное количество элементов или что-то еще, о чем я не думал?

1 Ответ

0 голосов
/ 04 сентября 2018

Это скорее комментарий, чем ответ, но здесь он звучит так: Нет - вы не можете получить ответ, который ищете, с помощью сканирования. Нет никакого способа создать фильтр, и даже если бы он был, вы все равно заплатили бы за полную стоимость сканирования (хотя вы бы экономили на пропускной способности сети).

Ваши варианты:

  1. Используйте метод, который вы используете: получите уникальные идентификаторы, а затем выполните итерацию и запросите с лимитом 1

  2. Используйте две таблицы: одну для хранения исторических значений и одну для хранения самых последних значений для каждого элемента

Обратите внимание, что во втором примере есть несколько предостережений: вы должны быть терпимы к возможной последовательности; и вы не должны обновлять какие-либо элементы более 1000 раз в секунду (хотя практический предел реально ниже - возможно, 6-700)

...