DynamoDB — локальные и глобальные вторичные индексы

Dynamodb — это бессерверная служба базы данных nosql, предлагаемая AWS.

Данные в таблице Dynamodb хранятся в виде пар ключ-значение вместо обычного подхода столбцов строк в базе данных SQL.

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

Ключ секции похож на первичный ключ — он однозначно идентифицирует запись в таблице.

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

Запись Dynamodb может быть однозначно идентифицирована по ключу раздела и ключу сортировки.

Но проблема в том, что вы можете запрашивать только атрибут первичного ключа (раздел + сортировка).

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

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

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

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

Помните, что вы можете создать LSI только при создании самой таблицы.

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

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

Это неэффективная и нерентабельная операция, так как вам придется читать все записи таблицы.

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

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

Вы будете настраивать предоставленную пропускную способность GSI отдельно, чтобы она не работала с табличными RCU/WCU. Кроме того, их можно создать после того, как таблица уже создана.

Каждая таблица в DynamoDB может иметь до 20 глобальных вторичных индексов (квота по умолчанию) и 5 ​​локальных вторичных индексов.

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