Какие основные виды систем управления базами данных (СУБД) ты знаешь и в каких Node.js-проектах их применял?

«Какие основные виды систем управления базами данных (СУБД) ты знаешь и в каких Node.js-проектах их применял?» — вопрос из категории Базы данных, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В контексте разработки на Node.js я применял разные СУБД в зависимости от структуры данных и требований проекта.

1. Реляционные (SQL): PostgreSQL, MySQL, SQLite

  • Использовал: Для проектов с четкой, структурированной схемой данных, где важны ACID-транзакции и сложные связи (интернет-магазины, CRM, системы учета).
  • Пример с Node.js + PostgreSQL: Использую node-postgres (pg) драйвер или Prisma ORM.
    // Простой запрос с pg
    const { rows } = await pool.query(
        'SELECT * FROM users WHERE active = $1',
        [true]
    );

2. Документные NoSQL (MongoDB)

  • Использовал: Для проектов с гибкой, часто меняющейся схемой (контент-платформы, каталоги продуктов с разнородными атрибутами), а также когда нужна быстрая разработка прототипа.
  • Стек: Node.js + Mongoose.
    // Гибкая схема в MongoDB
    await Product.create({
        name: 'Phone',
        specs: { screen: '6.1"', ram: '8GB' }, // Вложенный документ
        tags: ['electronics', 'new'] // Массив
    });

3. In-memory хранилища «ключ-значение» (Redis)

  • Использовал: Не как основную БД, а как вспомогательный слой для кэширования (результаты тяжёлых SQL-запросов, HTML-сниппеты), сессий, очередей задач (Bull) и реализации rate-limiting.
  • Пример кэширования в Node.js:

    const cachedData = await redisClient.get('api:popular-products');
    if (cachedData) return JSON.parse(cachedData);
    
    const data = await db.query('SELECT * FROM products ORDER BY views DESC LIMIT 10');
    await redisClient.setex('api:popular-products', 3600, JSON.stringify(data)); // Кэш на 1 час
    return data;

4. Временные ряды (TimescaleDB — расширение PostgreSQL, InfluxDB)

  • Использовал: В проекте для сбора и анализа метрик IoT-устройств (температура, потребление энергии). TimescaleDB хорош, если ты уже в экосистеме PostgreSQL.

5. Графовые (Neo4j)

  • Изучал: Для задачи рекомендательной системы, где связи между сущностями (пользователи, товары) первичны. В продакшене не использовал из-за сложности операционного обслуживания.

Критерии выбора в Node.js проекте:

  • Структура данных: Четкая схема -> PostgreSQL. Гибкая/неизвестная схема -> MongoDB.
  • Транзакции: Финансовые операции -> PostgreSQL (поддержка ACID).
  • Производительность и кэш: Redis как обязательный компонент для разгрузки основной БД.
  • Команда и экосистема: Если команда сильна в SQL, не стоит выбирать MongoDB только потому, что она «проще для Node.js». Современные ORM вроде Prisma сильно нивелируют эту разницу.