Получить наибольшее значение первичного ключа из таблицы DynamoDB, используя boto3 - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь получить наибольшее значение первичного ключа (id в конкретном случае), используя boto3.

Структура таблицы: | id | name | |-----|-------| | 1 | Bob | | 4 | Alice | | 5 | Eve | где id - это первичный ключ (ключ хеша), а ключ сортировки (ключ диапазона) отсутствует.

В результате я должен получить 5 (id наибольшее значение).

Я посмотрел мысль Документы и этот ответ , но не нашел ответа.

Атрибут

ScanIndexForward из метода table.scan() требует ключ сортировки. table.query() метод требует условия (например, Key={"name":"Bob"}).

Значение id не является автоинкрементным (в таблице могут отсутствовать значения id), поэтому это решение не помогает.

Вопрос: можно ли получить наибольшее значение id из таблицы без ключа сортировки? (Конечно, я не хочу сканировать таблицу all и находить ее с помощью python.)

Спасибо за чтение!

1 Ответ

0 голосов
/ 03 ноября 2018

Это, вероятно, не то, что вы хотите услышать, но вы не можете сделать это, используя табличные операции напрямую.

Динамо дает вам множество ограничений в создании масштабируемой системы. И большинство из них охватывают варианты, которые у вас есть для запроса; предлагая больше хранилища документов на основе ключей, чем традиционная база данных (дальнейшее обсуждение использования сканирования с некоторыми сомнительными предложениями) .

Я предлагаю вам взглянуть на то, как вам нужен доступ к вашим данным, и рассмотреть проект схемы в пределах раздела / сортировки / индексов.

Для подобных ситуаций (например, когда вам нужно извлечь свойство из таблицы), вы можете использовать архитектурный шаблон:

DynamoDB
  -> DynamoDB Streams (shares Create/Update/Delete events)
  -> Lambda checks id against a stored value of 'current max id':
       - if create/update and higher, saves 'current max id' and 'last max id'
       - if delete and equal, replace 'current max id' with 'last max id'

В этом случае вы можете сохранить полученное «представление» максимального идентификатора в другой таблице или в версионном документе s3. (нет. есть некоторые ограничения, вам может понадобиться сделать scan, если два самых больших идентификатора будут удалены с помощью этой реализации).

...