Сканирование Dynamodb в отсортированном порядке
Привет, у меня есть таблица динамод Я хочу, чтобы служба вернула мне все элементы в этой таблице, и этот порядок сортируется по одному атрибуту.
Нужно ли создавать глобальный вторичный индекс для этого? Если это так, какой должен быть хеш-ключ, каков ключ диапазона?
(Обратите внимание, что в запросе к gsi должен быть указан компаратор "EQ" для хэш-ключа GSI.)
Большое спасибо!
Erben
Ответы
Ответ 1
Если вы знаете HashKey, тогда любой запрос вернет элементы, отсортированные по ключу Range:
"Результаты запроса всегда сортируются с помощью ключа диапазона. Если тип данных ключа диапазона" Число ", результаты возвращаются в числовом порядке, в противном случае результаты возвращаются в порядке значений символов символа ASCII. По умолчанию порядок сортировки возрастает. Для изменения порядка используйте параметр ScanIndexForward для false. " Операции запроса и сканирования - Amazon DynamoDB: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html
Теперь, если вам нужно вернуть "все элементы", значит, это сканирование. Я не думаю, что вы можете заказать результаты сканирования.
Другой вариант - использовать GSI. (Пример здесь: fooobar.com/questions/228234/...). Здесь вы видите, что GSI содержит только HashKey. Результаты, которые, я думаю, будут в отсортированном порядке этого ключа (я еще не проверял эту часть в программе!)
Ответ 2
Подход, который я использовал для решения этой проблемы, заключается в создании Глобального вторичного индекса, как показано ниже. Не уверен, что это лучший подход, но публикуйте его, если он кому-то полезен.
Hash Key | Range Key
------------------------------------
Date value of CreatedAt | CreatedAt
Ограничение, налагаемое на пользователя API HTTP, указать количество дней для извлечения данных, по умолчанию - 24 часа.
Таким образом, я всегда могу указать HashKey как текущий день, и RangeKey может использовать > и < операторы при извлечения. Таким образом, данные также распространяются на несколько осколков.
Ответ 3
На данный момент dynamoDB scan не может вернуть вам отсортированные результаты.
Вам нужно использовать query с новым глобальным вторичным индексом (GSI) с полем hashkey и range. Хитрость заключается в использовании хеш-ключа , которому присваивается одинаковое значение для всех данных в вашей таблице.
Я рекомендую создать новое поле для всех данных и вызвать его "Статус" и установить значение "ОК" или что-то подобное.
Затем ваш запрос для сортировки всех результатов будет выглядеть так:
{
TableName: "YourTable",
IndexName: "Status-YourRange-index",
KeyConditions: {
Status: {
ComparisonOperator: "EQ",
AttributeValueList: [
"OK"
]
}
},
ScanIndexForward: false
}
Документы для написания запросов GSI находятся здесь: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Querying