Передовий досвід 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
полі для прямого пошуку документів.
Так це має працювати? Чи законно викидати такі дико-розбіжні види даних у ту саму таблицю? Або другий, настільний дизайн - кращий підхід?
У який момент було б правильно додати другу таблицю?