Запрос нескольких атрибутов в Amazon DynamoDB - PullRequest
0 голосов
/ 25 сентября 2019

Я перемещаю свою базу данных из базы данных sql в Dynamodb.В настоящее время у меня есть таблица с этими значениями:

  • tenantId (PartitionKey)
  • resourceId (RangeKey)
  • type
  • role
  • name

В данный момент у меня есть следующий запрос:

  • получить все ресурсы, принадлежащие арендатору ten, который имеет тип t, роль r и имя содержит n.Где type role name могут быть нулевыми значениями, поэтому в этом случае они не используются в качестве фильтров.

Используя фильтры, можно выполнить этот запрос в DynamodB, но читаяследующая статья https://aws.amazon.com/blogs/database/querying-on-multiple-attributes-in-amazon-dynamodb/ Я понял, что это может быть дорогостоящим запросом, так как DynamodB получает эти данные, а затем фильтрует на стороне сервера.На этой странице предлагается создать GSI со следующим значением:

  • tenantId-type-role-name

С помощью этого индекса я могу легко фильтровать по ten t r n но в случае, если мне просто нужно отфильтровать tenantId type name, как я должен запросить GSI, чтобы получить все записи, имеющие арендатора ten тип t, а имя содержитn, но нет ограничений на role (оператор contains, кажется, поддерживается только для фильтров).

Мне интересно, нужно ли мне создавать GSI для каждой комбинации, что-то вроде:

  • tenantId-тип
  • tenantId-роль
  • tenantId-имя
  • tenantId-тип-роли
  • ...

Заранее спасибо за помощь

1 Ответ

0 голосов
/ 27 сентября 2019

Прежде чем вы создадите GSI, чтобы упростить ваши запросы.Подумайте о хранении ваших данных в другом формате.

Например, сколько ресурсов вы ожидаете на одного арендатора?Не могли бы вы сохранить ваши данные в таком виде:

{
    tenant: 123, //(partition)
    resources: [ 
      { type: 'type1', role: 'role1', name: 'somename1'},
      { type: 'type2', role: 'role2', name: 'somename2'},
      { type: 'type3', role: 'role3', name: 'somename3'}
    ]
}

В указанном выше формате время чтения будет быстрым и масштабным.Затем вы можете отфильтровать свою логику в коде.Ваши записи DynamodB могут иметь размер 400 КБ, поэтому вы, вероятно, можете хранить несколько тысяч ресурсов в указанном выше формате для каждой записи.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...