2013-09-11 3 views
2

Я планирую запустить веб-проект, и я планирую использовать MySQL как базу данных. Мой язык программирования на стороне сервера - C++. Раньше я использовал unixodbc. Поскольку я начинаю новый проект, я хочу проверить, можно ли продолжить работу с odbc или попробовать другой коннектор. Я знаю, что использование odbc будет предлагать переносимость среди РСУБД. Я действительно не забочусь об этом, потому что, если я переключусь, я переключусь на кассандру или монгодб.MySQL: C++ Connector vs ODBC

Мои требования к библиотеке C++ Подключение:

  1. должны хорошо работать на больших наборов данных, я ожидать, что MySQL Data расти гораздо больше.
  2. Я ожидаю большого количества входящих соединений, поэтому надеюсь, что мой сервер откроет больше соединений MySQL.
  3. Производительность важнее.
  4. Пул соединений.
  5. Набор функций против ODBC.

Я планирую только для среды Linux/Unix, желательно CentOS/FreeBSD. Пожалуйста, помогите мне выбрать хороший подход для подключения к mysql из C++.

ответ

1

Библиотека Qt имеет хорошую поддержку SQL в своем модуле QtSql. Модуль QtSql имеет очень хорошую документацию, хороший объектно-ориентированный API, другую поддержку базы данных (MySQL, ODBC через unixODBC, PostgreSQL, ORACLE). Вам не нужно использовать функции Qt GUI для использования модуля QtSql.

1

Мне нравится библиотека SOCI. http://soci.sourceforge.net/

У этого есть отдельный EDSL (язык встроенного домена), который строит деревья выражений, чтобы скомпилировать запрос и заполнить ваши объекты, а не чистые SQL-запросы, которые отправляют новые (варианты), и оставляет вам работу по выяснению как их правильно преобразовать.

Он легкий, адаптируется к вашим объектам, очень интуитивно понятный, подключается к любой базе данных на случай, если вы хотите изменить, поддерживает даже хранимые процедуры. Это, безусловно, удобно через некоторое время, но есть небольшая кривая обучения в отношении того, к чему вы могли привыкнуть. Пример

Код:

{ 

    session sql(mysql, "db=test user=root password='Ala ma kota'"); 

    boost::tuple<string, boost::optional<string>, int> person; 

    sql << "select name, phone, salary from persons where ...", 
     into(person); 

    if (person.get<1>().is_initialized()) 
    { 
     // the given person has a phone number 
    } 
    else 
    { 
     // this person does not have a phone number 
    } 

} // session closed at scope end