Каковы основные различия между SQL и NoSQL базами данных?

«Каковы основные различия между SQL и NoSQL базами данных?» — вопрос из категории Базы данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SQL (реляционные) и NoSQL (нереляционные) базы данных фундаментально различаются моделью данных, схемой, языком запросов и подходом к масштабированию.

Характеристика SQL (Реляционные БД) NoSQL (Нереляционные БД)
Модель данных Таблицы со строками и столбцами. Строгие связи между таблицами. Разнообразные: документы (JSON), пары «ключ-значение», графы, wide-column.
Схема Жесткая (Schema-on-Write). Структура (столбцы, типы) определяется заранее. Изменение сложно. Гибкая (Schema-on-Read). Структура может меняться для каждого элемента. Данные часто самоописываемые.
Язык запросов Стандартизированный SQL (SELECT, JOIN, WHERE). Специфичный для каждой БД (например, MongoDB Query Language). Нет стандартных JOIN.
Масштабирование Вертикальное: Увеличение мощности сервера (CPU, RAM). Сложное горизонтальное масштабирование. Горизонтальное: Легко распределяется по множеству серверов (шардирование).
Транзакции Поддержка ACID (Atomicity, Consistency, Isolation, Durability). Гарантирует целостность данных. Часто BASE (Basically Available, Soft state, Eventual consistency). Высокая доступность, возможна временная несогласованность.
Примеры PostgreSQL, MySQL, SQLite, Microsoft SQL Server. Документные: MongoDB, Couchbase.
Ключ-значение: Redis, DynamoDB.
Графовые: Neo4j.
Wide-column: Cassandra.

Пример кода (MongoDB vs SQL):

// NoSQL (MongoDB) - Вставка документа с гибкой структурой
db.users.insertOne({
    name: "Alice",
    age: 30,
    address: { city: "Moscow", street: "Lenina" }, // Вложенный объект
    tags: ["developer", "swift"] // Массив
});
-- SQL - Вставка в таблицы с фиксированной схемой
-- Сначала нужно создать таблицы
INSERT INTO Users (name, age) VALUES ('Alice', 30);
-- Адрес и теги, вероятно, будут в отдельных таблицах со связями.

Когда что выбирать:

  • Выбери SQL, если нужны сложные транзакции, целостность данных, сложные запросы с JOIN, и структура данных стабильна (например, банковские системы, ERP).
  • Выбери NoSQL, если нужны высокая скорость записи/чтения, гибкая схема, горизонтальное масштабирование для больших объемов данных, или данные нереляционны по природе (например, лог-файлы, каталоги товаров, социальные графы).