Динамо DB Query and Scan Поведение Вопрос - PullRequest
0 голосов
/ 07 сентября 2018

Я думал об этом сценарии при запросах / сканировании в таблице DynamoDB.

Что делать, если я хочу получить отдельные данные в таблице, и у меня есть 20k данных в этой таблице, а данные, которые я ищу, находятся в 19-й строке. Я использую Scan с лимитом 1000, например. Он потребляет пропускную способность, хотя в 19-й раз не возвращает ни одного элемента? Например,

У меня есть таблица пользователей:

type UserTable{
   userId:ID!
   username:String,
   password:String
}

тогда мой запрос

var params = {
            TableName: "UserTable",
            FilterExpression: "username = :username",
            ExpressionAttributeValues: {
                ":username": username
            },
            Limit: 1000
        };

Как эффективно справиться с этим?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

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

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

Подробнее о вторичных индексах читайте здесь

0 голосов
/ 07 сентября 2018

Согласно документ

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

Производительность

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

Чтение единиц

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

Для лучшей производительности и меньшего потребления единиц чтения, я советую вам создать GSI , используя его с запросом

...