Существует не дешевый способ сделать это без добавления места или сложности.
Дорогим способом было бы сканировать всю таблицу, извлекать только атрибуты ключа и атрибут attributeName
, вычислять max, а затем получать все (полные) элементы, найденные с помощью этого макс.
Если у вас есть составной ключ (хеш и диапазон) и несколько хеш-ключей относительных общих элементов в таблице, то Local secondary indexes поможет и будет стоить всего немного места. У вас может быть индекс в атрибуте attributeName
, а затем запрос на каждый хэш-ключ с использованием этого индекса, а также «isScanIndexForward: false» и «limit: 1», чтобы получить «max» из этого hashKey. Затем вы вычисляете максимальное количество всех результатов (1 результат от каждой хэш-клавиши), и вы знаете значение для извлечения. Вы можете получить их все одинаково, с обратным просмотром и условием «EQ» на attributeName
.
Если вы хотите добавить сложность, вы можете сохранить эту информацию в дополнительной таблице. Что-то вроде tableName.extraInfo
, у которого есть такой элемент: {hashKey: "maxOfAttributeName", "value":5}
. Затем, когда вы put
или update
в главной таблице, вы также обновляете это поле, и у вас есть ваша ценность. Остерегайтесь сложностей транзакций, связанных с этим подходом, если ваши данные быстро меняются.
Обратите внимание, что этот ответ может быть более правильным. С тех пор DynamoDB выпустил локальные вторичные индексы. –