С какими базами данных вы работали?

«С какими базами данных вы работали?» — вопрос из категории Базы данных, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В своей практике на C++ я работал как с реляционными, так и с NoSQL базами данных.

Реляционные (SQL):

  • PostgreSQL: Основная СУБД для большинства проектов. Работал с транзакциями, сложными JOIN, оконными функциями. Оптимизировал производительность через EXPLAIN ANALYZE и создание составных индексов.
  • MySQL/MariaDB: Использовал в legacy-проектах и системах, где была важна простота развертывания.

NoSQL:

  • Redis: Применял для кэширования, хранения счетчиков и как брокер сообщений через pub/sub. Использовал структуры данных вроде отсортированных множеств (ZSET) для реализации leaderboard.
  • MongoDB: Работал в проектах, где требовалась гибкая схема данных и быстрая прототипизация. Использовал официальный C++ драйвер.

Пример работы с MongoDB на C++:

#include <bsoncxx/builder/stream/document.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>

using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::open_document;
using bsoncxx::builder::stream::close_document;
using bsoncxx::builder::stream::finalize;

int main() {
    mongocxx::instance inst{};
    mongocxx::client conn{mongocxx::uri{"mongodb://localhost:27017"}};
    auto db = conn["testdb"];
    auto collection = db["users"];

    // Вставка документа
    auto doc = document{} << "name" << "Ivan"
                          << "age" << 30
                          << "tags" << open_array << "cpp" << "backend" << close_array
                          << finalize;
    collection.insert_one(doc.view());

    // Поиск
    auto filter = document{} << "age" << open_document << "$gt" << 25 << close_document << finalize;
    auto cursor = collection.find(filter.view());
    for (auto&& user : cursor) {
        std::cout << bsoncxx::to_json(user) << std::endl;
    }
    return 0;
}

Выбор базы данных всегда зависит от задачи: PostgreSQL для целостности и сложных запросов, Redis для скорости и кэша, MongoDB для документоориентированных данных с изменяемой схемой.