#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
, но я сомневаюсь, что это то, что вы хотите.