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

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

Ответ

На предыдущем проекте, который был написан на C++, я работал с PostgreSQL и Redis.

PostgreSQL использовался как основная реляционная СУБД для хранения структурированных данных пользователей и транзакций. Я писал и оптимизировал сложные SQL-запросы, настраивал индексы для ускорения JOIN-операций и участвовал в настройке репликации для отказоустойчивости. Для работы с PostgreSQL из C++ использовалась библиотека libpqxx.

Пример подключения и запроса:

#include <pqxx/pqxx>
#include <iostream>

int main() {
    try {
        pqxx::connection conn("host=localhost dbname=mydb user=postgres");
        pqxx::work txn(conn);
        pqxx::result res = txn.exec("SELECT id, name FROM users WHERE active = true");
        for (auto row : res) {
            std::cout << row["id"].as<int>() << ": " << row["name"].as<std::string>() << std::endl;
        }
        txn.commit();
    } catch (const std::exception &e) {
        std::cerr << "Error: " << e.what() << std::endl;
    }
    return 0;
}

Redis применялся для кэширования результатов тяжелых запросов и хранения сессионных данных, что значительно снижало нагрузку на PostgreSQL. Также использовал механизм pub/sub для реализации простой очереди событий между микросервисами. Для работы с Redis использовал клиентскую библиотеку hiredis.

В C++ проектах я предпочитаю использовать либо "сырые" SQL-запросы через библиотеки-драйверы, либо легковесные обёртки, так как полноценные ORM для C++ (например, ODB, SOCI) зачастую менее гибки и производительны, чем ручное управление.