Databases Flashcards
Когда лучше document reference в MongoDB?
Когда мы видим, что данные будут дублироваться, например разные книги пишет один автор, тогда будут проблемы с консистентностью и тут явно нужно указывать ref.
Если у нас есть много комментариев, которые хранятся в документе поста, то добавление нового, будет перезаписывать весь документ, что будет замедлять запрос.
Если у нас связанные данные, к примеру, комментарии к посту, будут запрашиваться отдельно, например, лучшие комментарии дня. Или все комментарии одного пользователя, тоже намного удобнее использовать ref.
Когда лучше embedded documents в MongoDB?
Если у нас связь 1 к 1, например, мы храним паспортные данные или адрес.
Также, если мы храним данные, которые привязаны к одному документы и не будут запрашиваться неразрывно от него. Например, если мое резюме загнать в MongoDB, то, где я учился и работал лучше будет хранить в документе резюме, а не отдельно.
Репликация БД
Репликация - поднимается несколько копий. При интенсивном чтении, нагрузка на сервера меньше.
Шардинг БД
Шардинг - это разбиение данных на более мелкие куски. В итоге, можно поднимать дополнительные машины и скейлиться горизонтально.
DB normalization
Нормалізація — це процес побудови структури даних і залежностей, при якому усувається надмірність і несумісні залежності.
1 НФ — відсутня надмірність, окрема таблиця для кожного пов’язаного набору даних, є первинний ключ.
2 НФ — окремі таблиці для даних у кількох записах, пов’язані вторинним ключем.
3 НФ — поля, що не залежать від ключа, виносяться в окрему таблицю (університет можна зберігати в користувачі, але можна і окремо).
DB integrity
Соблюдение точности и консистентности данных. Дата или номер телефона в правильном формате.Потеря связанной записи (книга без автора).
Consistency in DB
Консистентність БД — це стан бази, коли всі дані валідні, без суперечностей і “відірваних” зв’язків, що відповідає заданим правилам і обмеженням.
NoSQL vs SQL
SQL - in cases where structure is well defined and stable. Data consistency is important. (Orders, banking.)
NoSQL - in cases where structure evolve rapidly. (Social networks, data analysis)
ACID
Описывает транзакционную систему, при которой база будет надежно работать даже в случае ошибок.
Atomicity - операция или выполнилась или нет.
Consistency - после транзакции база перейдет с одного валидного состояния в другое.
Isolation - операции не влияют друг на друга.
Durability -данные после успешно завершенной транзакции, будут успешно сохранены даже в случае перебоя в питании
Розподілені транзакції
У випадку мікросервісів для розподілених транзакцій можна використовувати такі патерни:
Двофазний коміт (Two-phase commit)
Складається з фази підготовки і фази коміту. Потрібен координатор, який спочатку створює глобальну транзакцію, потім обходить сервіси та каже їм підготуватися і створити транзакцію. Коли всі готові, він дає команду виконати зміни і закомітити їх. Якщо виконання переривається, координатор обходить сервіси та скасовує транзакції, дані відкатуються.
Такий синхронний підхід може займати надто багато часу.
Сага (Saga)
Сага є асинхронним патерном. Сервіси взаємодіють між собою за допомогою подій (івентів). Якщо все йде добре, відправляється подія для подальшої обробки. Якщо виникає помилка, надсилається подія з позначкою про помилку, яка вказує на необхідність відкоту. Може також бути присутній єдиний процесор, який координує події та викликає відповідні ендпоїнти.
Active record vs Data mapper
Active record - объект с данными позволяет нам сохранять и обновлять данные в базе через свой же интерфейс.
Data mapper - объект с данными ничего не знает о БД. Есть отдельная прослойка позволяющая создавать и обновлять данные. Это дает нам возможность разделять бизнес логику и слой базы данных.
CAP теорема
Consistency, Availability, Partition Tolerance. Стверджує, що в розподіленій БД можна забезпечити лише 2 з цих властивостей.
Consistency – всі вузли бачать однакові дані одночасно, забезпечуючи актуальність, але потребуючи синхронізації, що може знижувати доступність.
Availability – кожен запит отримує відповідь, навіть якщо частина системи недоступна, але це може призвести до застарілих даних.
Partition Tolerance – система може обробляти данні, навіть при проблемах зі зв’язком між вузлами, що є критичним для стабільності розподілених систем.
Комбінації в CAP теоремі:
CP (Consistency + Partition Tolerance): Система забезпечує узгодженість і стійкість до розділення, але може тимчасово бути недоступною. Пріорітет на консистентність. Приклад: HBase, MongoDB.
AP (Availability + Partition Tolerance): Система забезпечує доступність і стійкість до розділення, але можливі різні версії даних на вузлах. Приклад: Cassandra, CouchDB.
CA (Consistency + Availability): Забезпечує узгодженість і доступність, але не витримує розділення. Реалізується в однонодових або повністю з’єднаних системах, як реляційні бази даних.
Які є типи join в SQL?
Inner join - повертаються рядки в обох таблицях.
Left join - всі рядки в лівій таблиці, якщо немає в правій, буде null.
Right join - всі рядки в правій таблиці, якщо немає в лівій, буде null.
Outer join - повертає всі рядки з обох таблиць. Якщо рядок відсутній в одній таблиці, його значення заповнюються NULL.
DB Connection Pool
База має певний розмір пулу в залежності від налаштувань.
Робиться запит, береться конекшн з пулу. Якщо немає вільних, запит очікує.
Після виконання конекшн вивільняється.
Якщо навантаження низьке, частина конекшенів закривається.