Динамическая сортировка БД

#amazon-web-services #nosql #amazon-dynamodb #secondary-indexes

#amazon-веб-сервисы #nosql #amazon-dynamodb #вторичные индексы

Вопрос:

У меня есть сценарий, в котором мне нужно будет перечислить входящие запросы пользователя, отсортированные по времени создания и приоритету (высокий, средний, низкий), а также разбивку на страницы. Есть ли способ добиться этого в DynamoDB?

Прямо сейчас я использую вторичный индекс, такой как userId-createdAt-index, который сортирует данные на основе времени создания и далее сортирует запрос на основе приоритета отдельно во внешнем интерфейсе. Кто-нибудь, пожалуйста, предоставьте правильное решение для этого.

Комментарии:

1. Не могли бы вы добавить еще несколько деталей? Как образец данных или что-то в этом роде.

2. Первичный ключ: идентификатор запроса, GSI: {ключ раздела: идентификатор пользователя, ключ сортировки: createdAt}, Другими атрибутами являются : Приоритет (возможные значения: высокий, средний, низкий), updatedAt. Здесь мне нужно отсортировать по времени создания, а затем упорядочить по приоритету.

3. Я сомневаюсь, что вы хотите сортировать по дате / времени, а затем по приоритету. На практике это просто сортировало бы по дате / времени, потому что, вообще говоря, никакие две записи не будут иметь одинаковую временную метку.

Ответ №1:

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

DDB гарантирует порядок отсортированного индекса, поэтому для вас подкачка будет корректной по дате. Если вы хотите изменить порядок, добавьте ScanIndexForward в свой запрос и установите для него значение false .

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

В зависимости от вашего варианта использования, другим вариантом для рассмотрения является запрос по приоритету с помощью KeyConditions и добавления условия #priority EQ :priority , но я сомневаюсь, что это то, что вы хотите.