Лучшие практики DyanmoDB дают понять, что:
Вы должны поддерживать как можно меньше таблиц в приложении DynamoDB. Наиболее хорошо разработанные приложения требуют только одну таблицу.
Я нахожу забавным то, что почти каждый урок, который я видел по работе с DyanmoDB, имеет многостольный дизайн.
Но что это означает на практике?
Давайте рассмотрим простое приложение с тремя основными объектами: Пользователи, Проекты и Документы. Пользователь владеет несколькими проектами, а Проект может иметь несколько Документов. Обычно нам приходится запрашивать проекты для пользователя и документы для проекта. Количество операций чтения превышает количество записей.
Дизайн таблицы наивного учебника будет использовать три таблицы:
Users
Hash key
user-id
Projects
Hash key Global Index
project-id user-id
Documents
Hash key Global Index
document-id project-id
Мы могли бы довольно легко свернуть Project
и Document
в одну Documents
таблицу:
Documents
Hash key Sort key Global Index
project-id document-id user-id
Но зачем останавливаться на достигнутом? Почему не один столик, чтобы управлять ими всеми? Так как User
корень всего ...
Users
Hash key Sort key
user-id aspect
--------- ---------
foo user email: foo@bar.com ...
foo project:1 title: "The Foo Project"
foo project:1:document:2 document-id: 2 ...
Тогда у нас будет глобальный индекс, скажем, в email
поле для поиска записей пользователя, а другой - в document-id
поле для прямого поиска документов.
Это как это должно работать? Законно ли выбрасывать такие дико расходящиеся виды данных в одну и ту же таблицу? Или второй дизайн с двумя столами - лучший подход?
В какой момент было бы правильно добавить вторую таблицу?