Глобальный вторичный индекс с использованием атрибута, который разделяют не все элементы? - PullRequest
1 голос
/ 06 ноября 2019

Как это возможно, что DynamoDB может создать глобальный вторичный индекс, состоящий из ключа раздела (и ключа сортировки), который разделяют не все элементы в таблице? Я не могу поместить элемент в таблицу, которая не имеет надлежащей структуры первичного ключа, поэтому для меня не имеет смысла создавать GSI с использованием атрибута в качестве ключа раздела, который не все элементы ву таблицы есть.

Допустим, у меня есть таблица с 10 предметами. 5 пунктов пользователей. 2 товара - это продукты, которые я продаю. 3 оставшихся предмета являются заказами, которые были созданы.

Скажем также, что попытка приблизиться к этому стилю NoSQL была искренней и наполовину понятной, оставив нас с этими предметами и их соответствующими атрибутами -

user items: id, email, phone, address, first_name, last_name

product items: id, description, title, price

order items: id, user_id, product_id, quantity, creation_date

Ключом раздела этой таблицы является id.

Тогда, когда япопробуйте создать GSI, используя creation_date в качестве ключа раздела, это позволяет мне ... может кто-нибудь объяснить, почему это работает для меня?

1 Ответ

1 голос
/ 06 ноября 2019

Предметы, которые не имеют атрибута creation_date, не будут включены в GSI. Важно то, что все предметы, которые имеют creation_date, имеют id. Идея GSI в данном случае заключается в том, что вы можете запрашивать ваши элементы / данные по creation_date, что в противном случае вы бы не смогли, поскольку этот атрибут не является частью ключа разделения.

Вот больше о GSI

, в частности:

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

...