Ответ 1
На первой картинке, которую вы разместили, элементы в базовой таблице (первичный ключ) будут выглядеть так:
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, так и все принадлежащие ему элементы счета.
Представьте, что вы просматриваете счет 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 (Идиократия)
Если бы я создавал таблицу, я бы сделал так, чтобы слова "Кино", "Альбом" и т.д. Были частью фактического идентификатора (скажем, "Movie018274" и "Альбом983745987"), но это не обязательно, это просто делает идентификаторы более читабельными.