Ответ 1
http://forums.mysql.com/read.php?45,183339,183339 наслаждаться
Обновлена ссылка на исходную статью, показывающую, как выполнять асинхронные запросы mysql:
http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/
Существуют ли какие-либо асинхронные соединители для Mysql, которые могут использоваться в приложении C или С++? Я ищу что-то, что можно подключить к шаблон реактора, написанный на Boost.Asio.
[Изменить:] Запуск синхронного коннектора в потоках не является вариантом.
http://forums.mysql.com/read.php?45,183339,183339 наслаждаться
Обновлена ссылка на исходную статью, показывающую, как выполнять асинхронные запросы mysql:
http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/
У меня была аналогичная проблема с очень разными технологиями: витой python (основанный на реакторе IO) и sqlAlchemy (??). Во время поиска решения я нашел о проекте sAsync, который просто создал отдельный поток для sqlAlchemy, а затем ответил на запросы.
Учитывая, что ASIO основан на низкоуровневых функциях ОС (таких как aio_read() или ReadFileEx() и т.д.) и реактора уровня ОС (или проактора в Windows), я не думаю, что у вас есть еще один шанс, эмулируя "асинхронность" с помощью аналогичных средств.
Запуск синхронного коннектора в потоках не является вариантом
Подумайте об этом: libmysqlclient / mysqlclient.dll
, который вы используете, вызывает синхронные вызовы сокетов. Планировщик ОС правильно переключится на другой поток до тех пор, пока ввод/вывод не будет завершен, так что же разница? (кроме того, что вы не должны делать 2k потоков для этого..)
Изменить: mysql_real_connect() поддерживает параметр сокета UNIX. Вы можете, предположительно, прочитать себя с порта сервера mysql и записать в этот сокет UNIX только с помощью ASIO. Как проксификация.
[Запуск синхронного коннектора в потоках не является вариантом Подумайте об этом: libmysqlclient/mysqlclient.dll, который вы используете, вызывает синхронные вызовы сокетов. Планировщик ОС правильно переключится на другой поток до тех пор, пока ввод/вывод не будет завершен]
Это прослушивает меня! - "другой поток" может быть легко второй синхронизацией. соединение с mysql и должно обрабатываться mysql так же, как и другим клиентом? Мой gutfeel заключается в том, что он должен работать с использованием нескольких потоков.
MySQL Connector/С++ - это реализация JDBC 4.0 на С++
Справочными клиентами, использующими MySQL Connector/С++, являются: - OpenOffice - Workbench MySQL
Подробнее: http://forums.mysql.com/read.php?167,221298
Я думаю, что единственным решением будет создание асинхронной службы, которая обертывает стандартный коннектор. Однако вам нужно понять API ODBC.
Существует проект под названием DBSlayer, который помещает еще один слой перед MySQL, с которым вы разговариваете через JSON. http://code.nytimes.com/projects/dbslayer
Считаете ли вы использование libdrizzle? Я использовал только старую версию, с того момента, когда это был отдельный проект от дождя, и я протестировал асинхронные функции запросов, но я никогда не делал никаких реальных ориентиров, которые стоит упомянуть.