Как запросить DynamoDB по строке между другими ключами

#amazon-web-services #nosql #amazon-dynamodb #dynamodb-queries

#amazon-веб-сервисы #nosql #amazon-dynamodb #dynamodb-запросы

Вопрос:

Я пытаюсь разработать запрос DynamoDB, который соответствует следующим критериям:

get items by type, category, and date between(date_1, date_2)

У меня эти атрибуты уже сохранены в глобальном вторичном индексе:

  • введите (строка)
  • категория (строка)
  • дата (строка)

Я знаю, что мог бы использовать between оператор для запроса по заданной строке даты:

gsi_1_pk = 'products' and gsi_1_sk between '2019-01-01T00:00:00.000Z' and '2019-01-01T00:00:00.000Z'

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

Итак, мне нужно решение, которое позволяет мне запрашивать с помощью всех возможных комбинаций фильтрации: type , category , date between , type category type date between , category date between type category date between ,,,,,,.

Как я могу объединить эту between операцию с другими атрибутами из GSI?

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

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

2. Если вам нужны элементы, в которых и тип, и категория являются известными значениями, а дата находится в определенном диапазоне, затем создайте GSI с pk= type category и sk = date.

3. @jarmod Мне также нужно иметь возможность запрашивать по «типу дате» или «категории данные». Ваше предложение было бы уместно только в том случае, если бы мне всегда нужно было использовать «тип категория». Я добавлю это в вопрос, спасибо.

4. Вы можете использовать 3x GSI для запросов типа / даты, категории / date и типа category / date.

5. Возможно, непопулярный ответ, но, возможно, DynamoDB не является подходящим инструментом для этой работы, и вам следует использовать базу данных RDS. Вы все еще можете создать RDS без сервера с помощью Aurora.

Ответ №1:

В итоге я создал новый глобальный вторичный индекс, где я храню date только по ключу сортировки, что позволяет мне без проблем использовать between операцию Dynamo.

Недостатком является то, что мне пришлось создать новый GSI для такого простого запроса. Но, как многие говорили здесь, DynamoDB, похоже, не является «правильным / лучшим» инструментом для этой работы.

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

1. Мне любопытно, как этот единственный GSI будет поддерживать все 7 шаблонов доступа, которые вы описали.