Ответ
На предыдущем проекте, который был написан на 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) зачастую менее гибки и производительны, чем ручное управление.