Ответ
PostgreSQL — это реляционная система управления базами данных (RDBMS), которая хранит данные в таблицах со строгой, предопределенной схемой. Для работы используется язык SQL. Она обеспечивает полную поддержку ACID-транзакций, сложные JOIN-запросы, ссылочную целостность и мощные механизмы индексации.
MongoDB — это документоориентированная NoSQL база данных. Данные хранятся в виде гибких JSON-подобных документов (BSON) внутри коллекций. Схема не является строгой (schema-less или schema-flexible). Оптимизирована для горизонтального масштабирования (шардирования) и работы с большими объемами неструктурированных или полуструктурированных данных.
| Сравнительная таблица: | Критерий | PostgreSQL | MongoDB |
|---|---|---|---|
| Модель данных | Реляционная (таблицы, строки, столбцы) | Документная (коллекции, документы BSON) | |
| Схема | Строгая, требует предварительного определения | Гибкая, документы в одной коллекции могут иметь разную структуру | |
| Язык запросов | SQL (декларативный, мощный для сложных связей) | Собственный API и агрегационный pipeline (императивный, хорош для вложенных данных) | |
| Транзакции | Полная поддержка ACID (включая распределенные) | Поддержка ACID-транзакций на уровне одного документа (до версии 4.0). С версии 4.0+ — многодокументные транзакции. | |
| Масштабирование | Вертикальное (scale-up) и репликация. Горизонтальное (шардирование) сложнее. | Горизонтальное (scale-out) через встроенное шардирование — основная сила. | |
| Использование | Системы с комплексными транзакциями, аналитика, отчетность, данные со сложными связями. | Каталоги продуктов, контент-менеджмент, IoT, работа с данными, структура которых быстро меняется. |
Пример запроса для поиска пользователей старше 25 лет:
PostgreSQL (SQL):
SELECT * FROM users WHERE age > 25;
MongoDB (JavaScript Shell):
db.users.find({ age: { $gt: 25 } });