В чем разница между SQL и NoSQL базами данных?
Что проверяют
Понимаете ли вы, что NoSQL это зонтик для разных моделей, и умеете ли выбирать по шаблону доступа, а не по моде.
Как отвечать
Реляционные хранят данные строками в таблицах с заданной схемой, связывают их внешними ключами, поддерживают транзакции ACID и язык SQL. Сильны там, где данные связаны, а целостность важна: заказы, платежи, учётные записи.
NoSQL это не один тип, а несколько семейств:
- документные (MongoDB): гибкая схема, документ целиком со всеми вложениями;
- ключ-значение (Redis): предельно быстрый доступ по ключу, кэши и сессии;
- широких колонок (Cassandra): огромные объёмы, запись быстрее чтения, модель данных под конкретные запросы;
- графовые (Neo4j): связи первого класса, обход графа вместо соединений.
Отличия по существу:
- схема: жёсткая с миграциями против гибкой, где ответственность за форму переходит в код;
- масштабирование: реляционные традиционно растут вверх, а горизонтальное разбиение требует усилий; NoSQL проектировались под распределённость сразу;
- согласованность: ACID против согласованности в конечном счёте у многих распределённых NoSQL;
- связи: соединения против денормализации, когда одни и те же данные дублируются ради скорости чтения.
Обязательная оговорка про современность: граница размылась. PostgreSQL хранит и индексирует jsonb, то есть закрывает большую часть документных сценариев, а MongoDB давно умеет транзакции над несколькими документами.
Правило выбора: начинать с реляционной, если нет доказанной причины поступить иначе. NoSQL берут под конкретный шаблон доступа: кэш и сессии, поток событий, огромный объём с простыми запросами, граф связей.
Где спотыкаются
Говорят «NoSQL быстрее» без уточнения, на каком сценарии.
Считают, что в NoSQL нет схемы вовсе. Она есть, просто живёт в коде.
Не знают про jsonb и берут документную базу ради гибких полей.
Выбирают базу до того, как поняли, какие запросы будут.