В чем разница между проверкой и запросом в dynamodb? При использовании сканирования/запроса?

Операция запроса, указанная в документации DynamoDb:

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

и операцию сканирования:

Операция сканирования сканирует всю таблицу. Вы можете указать фильтры для применения к результатам, чтобы уточнить возвращаемые вам значения после полного сканирования.

Это лучше всего основывается на характеристиках производительности и стоимости.

Ответ 1

У вас есть ключ/первичный ключ раздела таблицы Dynamodb как customer_country. Если вы используете запрос, то поле customer_country является обязательным для выполнения операции запроса. Из всех фильтров могут быть сделаны только те элементы, которые принадлежат customer_country.

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

например:

здесь customer_country - ключ раздела/первичный ключ, а id - ключ sort_

-----------------------------------

customer_country | name   | id

-----------------------------------
VV               | Tom    | 1

VV               | Jack   | 2

VV               | Mary   | 4

BB               | Nancy  | 5

BB               | Lom    | 6

BB               | XX     | 7

CC               | YY     | 8

CC               | ZZ     | 9

------------------------------------
  • Если вы выполняете операцию запроса, она применяется только к значению customer_country. Значение должно быть только равным оператору (=).

  • Таким образом, выбираются только элементы, равные этому ключу раздела/значению первичного ключа.

  • Если вы выполняете операцию сканирования, она выбирает все элементы в этой таблице и отфильтровывает данные после того, как получает эти данные.

Примечание: не выполняйте операцию сканирования, она превышает ваш RCU.

Ответ 2

При создании таблицы Dynamodb выберите Первичные ключи и Локальные вторичные индексы (LSI), чтобы операция Query возвращала нужные вам элементы.

Операции запроса поддерживают только одинаковую оценку оператора первичного ключа, но условные (=, <, <=,>,> =, Between, Begin) для ключа сортировки.

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

Пример:

Table: CustomerId, AccountType, Country, LastPurchase

Primary Key: CustomerId + AccountType

В этом примере вы можете использовать операцию Query для получения:

  1. CustomerId с условным фильтром для AccountType

Операция сканирования должна быть использована для возврата:

  1. Все клиенты с определенным типом учетной записи
  2. Элементы на основе условных фильтров по стране, т.е. все клиенты из США
  3. Товары, основанные на условных фильтрах LastPurchase, т.е. все клиенты, которые сделали покупку в прошлом месяце

Чтобы избежать операций сканирования часто используемых операций, создайте локальный вторичный индекс (LSI) или глобальный вторичный индекс (GSI).

Пример:

Table: CustomerId, AccountType, Country, LastPurchase

Primary Key: CustomerId + AccountType
GSI: AccountType + CustomerId
LSI: CustomerId + LastPurchase

В этом примере операция Query может позволить вам получить:

  1. CustomerId с условным фильтром для AccountType
  2. [GSI] Условный фильтр по CustomerIds для определенного AccountType
  3. [LSI] CustomerId с условным фильтром на LastPurchase

Ответ 3

С точки зрения производительности, я думаю, что хорошей практикой является разработка таблицы для приложений, использующих Query вместо Scan. Поскольку операция сканирования всегда сканирует всю таблицу, прежде чем она отфильтровывает нужные значения, это означает, что для обработки таких операций, как чтение, запись и удаление, требуется больше времени и пространства. Для получения дополнительной информации, пожалуйста, обратитесь к официальному документу

Ответ 4

Запрос гораздо лучше, чем сканирование - по производительности. scan, как следует из названия, будет сканировать всю таблицу. Но вы должны хорошо знать ключ таблицы, ключ сортировки, индексы и связанные с ними индексы сортировки, чтобы знать, что вы можете использовать запрос. если вы фильтруете свой запрос, используя:

  • ключ
  • ключ и ключ сортировки
  • индекс
  • Индекс и связанный ключ сортировки

используйте запрос! в противном случае используйте сканирование, более гибкое в отношении того, какие столбцы вы можете фильтровать.

Вы НЕ МОЖЕТЕ Запрашивать, если:

  • более 2 полей в фильтре (например, ключ, сортировка и индекс)
  • только ключ сортировки (первичного ключа или индекса)
  • регулярные поля (не ключ, индекс или сортировка)
  • смешанный индекс и сортировка (index1 с сортировкой index2)\
  • ...

хорошее объяснение: https://medium.com/@amos.shahar/dynamodb-query-vs-scan-sql-syntax-and-join-tables-part-1-371288a7cb8f