2016-08-09 6 views
1

У меня есть таблица Нити с ID (номер), last_message (номер) и is_valid (номер).DynamoDB: Сортировка и фильтрация индекс

Я хочу получить результаты, где is_valid = 1 и отсортировано по last_message по возрастанию (по убыванию).

Я установил id как ключ раздела (hash), is_valid в качестве ключа сортировки, а затем создал глобальный вторичный индекс с именем «lastMessageValidIndex», где ключ раздела is_valid, а ключ сортировки - last_message, но он не работает.

Любая идея?

Спасибо.

ответ

0

вам нужно запросить lastMessageValidIndex. запрос для is_valid = 1, и вы должны получить результаты, упорядоченные по last_message

+0

Я попытался установить IndexName в lastMessageValidIndex, но порядок не изменился. У вас есть пример структуры и запроса? – Grork

+0

имя вторичного индекса не имеет значения. вам просто нужно запросить вторичный индекс. dynamodb сортирует результат для вас. поэтому, если вы получите результаты, ваш запрос будет одобрен, но, возможно, ваша схема индекса неверна. –

+0

По этой причине я спросил. С «Я установил IndexName» я говорил о параметре запроса. – Grork

0

Одна из трудностей с noSQL (и, следовательно, DynamoDB) заключается в том, что вы не можете просто запросить все. Вы можете запрашивать только индекс, и индекс должен быть уникальным (комбинация хеш-диапазона). Если есть две строки с одинаковыми значениями last_valid и last_message, в GSI будет вставлен только один.

Ключ раздела is_valid имеет только несколько переменных (возможно, только 0 и 1), что приводит к повреждению раздела (отсюда и название). Если db сильно используется, вы столкнетесь с проблемами (см. Также https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Partitions).

Если is_valid не изменяется относительно часто, вы можете подумать о создании 2 таблиц: один с действующими и один с только недопустимыми потоками. Затем вы можете запросить первичный ключ в правильной таблице. Когда is_valid переключается, вы просто перемещаете запись из одной таблицы в другую.

+0

Люк, спасибо. У вас есть идея? Я понял, что не могу сканировать, потому что тогда я не могу использовать ScanIndexForward, но я даже не могу использовать Query, потому что мне нужно указать значение для первичного ключа, но я хочу, чтобы все результаты были заданы с помощью специального выражения FilterExpression и упорядочены. Я не хочу использовать PHP для «отправки результатов» для установки порядка. – Grork

Смежные вопросы