Реляционные базы данных (например, PostgreSQL) и нереляционные базы данных (например, MongoDB) различаются структурой, целостностью, масштабированием и областями применения. Ниже рассмотрим их отличия на примере интернет-магазина - одной из типичных сфер, где применяются обе СУБД.
Реляционные БД (PostgreSQL):
Хранит данные в таблицах со строками и столбцами.
Имеет жёсткую схему - структура таблиц задаётся заранее.
Между таблицами строятся связи с использованием foreign keys (JOIN).
Обеспечивает строгую целостность данных (ACID).
📱 Про целостность данных (ACID) в контексте тестирования читай на бусти!
Использует язык SQL для запросов и анализа.
Пример запроса:
SELECT * FROM users WHERE age > 25;
SQL описывает, что нужно выбрать из таблицы users, где age > 25.
Нереляционные БД (MongoDB):
Хранит данные в JSON-подобных документах вместо таблиц.
Нет фиксированной схемы - структура записей может меняться на ходу.
Заточена под скорость, масштабирование и гибкость.
Использует набор функций (методов) для взаимодействия с данными.
Пример запроса:
db.users.find({ age: { $gt: 25 } });
где: db.users - коллекция пользователей
.find() - функция, которую предоставляет MongoDB
{ age: { $gt: 25 } } - фильтр в формате JSON, где $gt - оператор “больше чем” (greater than).
Когда используют PostgreSQL
PostgreSQL оптимален для системы, где критична согласованность и строгость структуры данных:
- Заказы, платежи и корзины покупателя. Эти данные требуют транзакций, строгих связей и соблюдения целостности ACID*.
- Ценообразование и скидки. Сложные связи между товарами, категориями и складскими остатками обрабатываются быстрее с помощью SQL и индексов.
- Отчеты, аналитика и фильтры. PostgreSQL поддерживает сложные запросы и аналитические функции, что упрощает работу с данными.
- Применение внешних ключей, триггеров и ограничений позволяет предотвратить логические ошибки (например, двойное списание товара).
Когда используют MongoDB
MongoDB подходит для динамичных и контентных частей интернет-магазина, где структура данных может меняться:
- Каталоги товаров с разными характеристиками.
- Товары разных типов могут иметь разное количество атрибутов, и JSON-документы MongoDB позволяют гибко хранить их без фиксированной схемы.
- MongoDB упрощает хранение неструктурированных данных, вроде лент активности, отзывов, комментариев, пользовательских сессий, историй просмотров и т.д.
- Системы рекомендаций и логирование.
Гибридный подход
На нашем примере обычно используется гибридное решение: PostgreSQL управляет заказами, оплатой, пользователями и отчетами, где важна точность и согласованность. MongoDB хранит каталоги, отзывы, логи и историю просмотров, где важна гибкость и масштабирование.
Почему я выбрала эти примеры?#qa
Потому что я работала и с MongoDB и с PostgreSQL! Больше всего мне понравилось работать с реляционной БД. Для меня PostgreSQL ближе по духу: структура, контроль, валидация, ACID - всё как в хорошем тестировании!))