Подтвердить что ты не робот

Сканирование Dynamodb в отсортированном порядке

Привет, у меня есть таблица динамод Я хочу, чтобы служба вернула мне все элементы в этой таблице, и этот порядок сортируется по одному атрибуту.

Нужно ли создавать глобальный вторичный индекс для этого? Если это так, какой должен быть хеш-ключ, каков ключ диапазона? (Обратите внимание, что в запросе к gsi должен быть указан компаратор "EQ" для хэш-ключа GSI.)

Большое спасибо!

Erben

4b9b3361

Ответ 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