кращі практики дизайну баз даних NoSQL


34

Я щойно почав використовувати базу даних на базі документів NoSQL (MongoDB) і мені цікаво найкращим методом проектування баз даних.

Я припускаю, що архітектура повинна відрізнятися від реляційних баз даних? Чи потрібно все ж прагнути до нормалізованої бази даних?

Наприклад, у мене є конкретний випадок використання;

У мене є користувач з історією прокату (масив адрес), чи повинен цей масив бути масивом для користувача або як окрема колекція із спільним ключем?


Не використовуйте закордонні ключі
герцогство, яке відбулося

Не використовуйте SQL :-). Серйозно, чи розповідає вам "NoSQL" ще щось про технологію?

Я думаю, цей потік повинен знаходитись на веб-сайті бази даних Stack Exchange. Там ви можете знайти додаткову допомогу з цього питання.
Луїс Арріохас

Відповіді:


23

Відповідним підходом до розробки баз даних NoSQL є DDD ( Design Driven Design ). Для деяких людей, які розробляли RDBMS, NoSql схожий на антидіаграми Sql, і це має більше сенсу, якщо розглядати його в області DDD.

Залежно від використання адрес, ви можете визначити його як об'єкт цінності всередині моделі / сутності історії прокату.

Ось кілька посилань, які можуть очистити думки щодо дизайну за допомогою NoSQL:


19

TL; DR

Нормалізація в RDBMS дозволяє використовувати сили реляційної парадигми.

Денормалізація в NoSQL дозволяє використовувати сили парадигми NoSQL.

Довга відповідь

RDBMS чудові тим, що вони дозволяють моделювати унікальні структуровані сутності (з можливістю зміни або ні) та їх взаємозв'язки. Це означає, що дуже легко працювати на рівні сутності, оновлюючи їх властивості, вставляючи інший, видаляючи його тощо. Але це також чудово для динамічної агрегації: собака з її власником, собака з будинками, в яких вона проживає тощо. . RDBMS дає вам інструменти для полегшення всього цього. Він приєднається до вас, він буде обробляти атомні зміни для усіх об'єктів для вас тощо.

Бази даних NoSQL є чудовими, оскільки вони дозволяють моделювати напів / неструктуровані агрегати та динамічні об'єкти. Це означає, що дуже легко моделювати постійно змінюються сутності, сутності, які не мають всіх однакових атрибутів та ієрархічних сукупностей.

Для моделювання NoSql вам потрібно думати з точки зору ієрархії та агрегатів замість сутностей та відносин. Таким чином, у вас немає особи, адреси оренди та стосунків між ними. У вас є записи про оренду, які в сукупності для кожної людини визначають, які адреси оренди вони мали.

Вам потрібно запитати, які дані мені потрібно буде разом змінювати. Які дані логічно групують інші дані. У вашому випадку людина звучить як добрий сукупність. Яка логічна точка входу до решти даних.

Скажімо, NoSQL, зберігайте речі, у яких є інші речі, у яких є свої речі. Поверніть мені всю ієрархію речей. Дозвольте мені змінити це, як мені заманеться, тепер замініть всю ієрархію речі на мою змінену. Це майже все, що він дає вам. Чому це корисно? Якщо у вас є ієрархія речей, з якими ви завжди взаємодієте в цілому. Або якщо вам потрібно масово масштабувати.

Все, що вам надає RDBMS, вам доведеться вручну реалізувати в коді та у вашій схемі. Вам доведеться приєднатися до коду, якщо вам коли-небудь знадобиться сукупність агрегатів. Вам доведеться проаналізувати, якщо вам потрібна лише частина сукупності. Вам потрібно буде перевірити унікальність самостійно, якщо ви не хочете повторювати речі. Вам потрібно буде реалізувати власну логіку транзакцій під час роботи над агрегатами тощо.

Тож мати один великий стіл з усім необхідним - це шлях до NoSql. Оскільки атомність гарантована лише на цьому рівні, і продуктивність теж. Визначення ваших відносин на ранніх етапах важливо. Це те, що денормалізація.

У RDBMS денормалізація ефективно калічить ваш БД до NoSQL. Тож зазвичай потрібно протилежне, тобто нормалізація. Якщо ви цього не зробите, вам слід використовувати замість БД NoSQL. Якщо тільки вам не потрібно трохи обох.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.