Преимущества локального индекса в AWS DynamoDB?

В DynamoDB у меня есть таблица, подобная приведенным ниже примерам данных.

pk        sk                         name         price 
=======================================================
product   cat#phone#name#iPhone11    iPhone 11    500
product   cat#phone#name#Nokia1100   Nokia 1100   100
product   cat#phone#name#iPhone11    iPhone 11    500

В случае, если я должен искать по имени. Итак, сначала я создал глобальный индекс для имени, где в index pk = pk, sk=name . Затем я сделал поиск, который работает нормально.

Теперь я изменил свое решение и создал файл local index for name, где name is sk. Он также работает нормально. Мой вопрос: если я использую здесь локальный индекс, есть ли какая-то польза? и когда я не должен использовать локальный индекс? Если глобальный индекс здесь не требуется, но я его использовал, есть ли проблемы с производительностью?


person Niloy Rony    schedule 03.02.2021    source источник
comment
Может быть полезнее будет сослаться на эту ветку. stackoverflow.com/ вопросы/21381744/   -  person Cody Tapp    schedule 03.02.2021


Ответы (1)


@niloy-рони,

Этот документ AWS очень хорошо объясняет LSI и GSI в деталях.

Теперь, чтобы ответить на ваши вопросы
- LSI предоставляется бесплатно. Вам не нужно платить за RCU от GSI, однако за WCU нужно платить за хранилище, как показано здесь, в другом AWS doc.
- Не следует использовать LSI, если вы совершенно уверены, что один раздел (т.е. - pk) вашей основной таблицы (pk остается тем же самым в LSI) может быть более 10 ГБ. Это также обсуждается в приведенной выше ссылке.
 – При использовании LSI и GSI нет проблем с производительностью с точки зрения задержек запросов. Однако чтения в GSI в конечном счете непротиворечивы, тогда как LSI поддерживает прочные непротиворечивые чтения.


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

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

Eventually Consistent Reads. Когда вы читаете данные из таблицы DynamoDB, ответ может не отражать результаты недавно завершенной операции записи. Ответ может содержать некоторые устаревшие данные. Если вы повторите запрос на чтение через короткое время, ответ должен вернуть последние данные.

Советы см. в этом документе AWS. чтобы свести к минимуму задержку распространения данных из основной таблицы в GSI

person Anshul Saraswat Kaul    schedule 03.02.2021
comment
Не могли бы вы объяснить больше о том, что чтения в GSI являются в конечном счете согласованными, тогда как LSI поддерживает прочные согласованные чтения. ? - person Niloy Rony; 03.02.2021
comment
LSI действует для вас как новая таблица, тогда как GSI — это индекс вашей основной таблицы, и данные между основной таблицей и GSI могут не совпадать. Обновлен ответ для более подробной информации. - person Anshul Saraswat Kaul; 03.02.2021