На первом рисунке вы разместили элементы в базовой таблице (первичный ключ) будет выглядеть так:
First_id(Partition key) Second_id(Sort Key) Dated
------------- ---------- ------
Invoice-92551 Invoice-92551 2018-02-07
Invoice-92551 Bill-4224663 2017-12-03
Invoice-92551 Bill-4224687 2018-01-09
Invoice-92552 Invoice-92552 2018-03-04
Invoice-92552 Bill-4224687 2018-01-09
И те же предметы в GSI предметы будут выглядеть так:
Second_id(Partition Key) First_id
---------- ---------------
Invoice-92551 Invoice-92551
Bill-4224663 Invoice-92551
Bill-4224687 Invoice-92551
Invoice-92552 Invoice-92552
Bill-4224687 Invoice-92552
Они нарисовали это довольно запутанным способом.
- Они слили ключи разделов в один блок, но они являются отдельными элементами.
- Они также пытались показать GSI на том же рисунке. Вы можете думать о базовой таблице и GSI как о двух отдельных таблицах, которые синхронизируются, во многих отношениях это то, чем они являются.
- На самом деле они не указали имя для ключевых атрибутов. В моем примере я назвал их First_id и Second_id.
Когда вы выполняете запрос к базовой таблице, вы можете использовать запрос с ключом разделения Invoice-92551
, и вы получаете как элемент «Счет-фактура», так и все принадлежащие ему элементы счета-фактуры.
Представьте, что вы просматриваете счет-фактуру Invoice-92551
в приложении и видите, что у него есть два связанных счета (Bill-4224663
и Bill-4224687
). Если вы нажмете на счет, приложение, вероятно, сделает запрос в GSI. Запрос GSI будет иметь ключ раздела Bill-4224687
. Если вы посмотрите на таблицу GSI, которую я нарисовал выше, вы увидите, что она вернет два элемента, показывая, что Bill-4224687
является частью двух счетов (Invoice-92551
и Invoice-92552
)
На втором изображении слова bookID, albumID и т. Д. Должны представлять действительные идентификаторы (скажем, 293847 и 3340876).
Я бы нарисовал его пример так:
ProductID(Partition Key) TypeID(Sort Key) Title Name
--------- ------ ------ ------
Album1 Album1 Dark Side
Album1 Album1:Track1 Speak to me
Album1 Album1:Track2 Breathe
Movie8 Movie8 Idiocracy
Movie8 Movie8:Actor1 Luke Wilson
Movie8 Movie8:Actor2 Maya Rudolph
Вот ваши вопросы:
Partition key: Album1
Предоставляет вам ВСЕ информацию (включая дорожки) в альбоме 1 (темная сторона)
Partition key: Album1 and Sort Key: Album1:Track2
Дает вам только информацию о Дыхании.
Partition key: Movie8
Дает вам ВСЕ информацию (включая актеров) о Movie8 (Идиократия)
Если бы я строил таблицу, я бы сделал так, чтобы слова Movie, Album и т. Д. Были частью фактического идентификатора (скажем, Movie018274 и Album983745987), но это не обязательно, это просто делает идентификаторы более удобочитаемыми.