В чем разница между MongoDB и MySQL?

«В чем разница между MongoDB и MySQL?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

MongoDB — документоориентированная NoSQL база данных. MySQL — реляционная SQL база данных.

Основные различия:

  1. Модель данных:

    • MySQL: Жесткая, предопределенная схема в виде таблиц со строками и столбцами. Данные нормализуются.
      -- Схема определяется заранее
      CREATE TABLE users (
      id INT PRIMARY KEY,
      name VARCHAR(100),
      email VARCHAR(255) UNIQUE
      );
      INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com');
    • MongoDB: Гибкая, схема-независимая модель. Данные хранятся как документы BSON (аналог JSON).
      // Документы в коллекции могут иметь разную структуру
      db.users.insertOne({
      _id: 1,
      name: "Alice",
      email: "alice@example.com",
      hobbies: ["reading", "hiking"] // Вложенный массив без изменения схемы
      });
  2. Язык запросов: SQL (стандартизированный) vs. MongoDB Query Language (MQL, специфичный для MongoDB).

  3. Масштабирование:

    • MySQL: Классическое вертикальное масштабирование (более мощный сервер) или сложное горизонтальное с шардингом/репликацией.
    • MongoDB: Встроенная поддержка горизонтального масштабирования через автоматический шардинг.
  4. Транзакции:

    • MySQL: Полная поддержка ACID-транзакций.
    • MongoDB: Поддержка многодокументных ACID-транзакций появилась в версии 4.0, но их использование может влиять на производительность.

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

  • MySQL: Для структурированных данных со сложными связями, где важна целостность данных и сложные JOIN-запросы (финансовые системы, ERP).
  • MongoDB: Для неструктурированных или полуструктурированных данных, быстрого прототипирования, сценариев с высокой нагрузкой на запись и горизонтальным масштабированием (каталоги продуктов, IoT, контент-платформы).