2008-09-01 2 views
18

Существуют ли какие-либо асинхронные соединители для Mysql, которые могут использоваться в приложении C или C++? Я ищу что-то, что можно подключить к reactor pattern, написанному в Boost.Asio.Асинхронный соединитель Mysql

[Изменить:] Запуск синхронного коннектора в потоках не является вариантом.

ответ

7

http://forums.mysql.com/read.php?45,183339,183339 пользуются

Обновлена ​​ссылка на оригинал статьи, показывающий, как сделать асинхронное MySQL запросов:

http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/

+1

Блокировка подключения является серьезной проблемой в этой реализации, но, тем не менее, похоже, делает то, что я изначально запросил. Проект дождя (https://launchpad.net/drizzle) работает над асинхронным клиентом, который будет обратно совместим с Mysql (упомянутый здесь: http://www.oddments.org/?p=20) – 2008-10-09 08:05:21

0

Я думаю, что единственным решением будет создание асинхронного сервиса, который обертывает standard connector. Однако вам нужно понять API ODBC.

2

У меня была аналогичная проблема с очень разными технологиями: витой python (основанный на реакторе IO) и sqlAlchemy (??). Во время поиска решения я нашел о проекте sAsync, который просто создал отдельный поток для sqlAlchemy, а затем ответил на запросы.

Учитывая, что ASIO основан на низкоуровневых функциях ОС (таких как aio_read() или ReadFileEx() и т. Д.) И реактора уровня ОС (или проактора в Windows), я не думаю, что у вас есть еще один шанс чем эмуляция «асинхронности» с помощью аналогичных средств.

Запуск синхронного разъема в резьбе не вариант

Подумайте об этом: libmysqlclient/mysqlclient.dll вы используете делает синхронные вызовы сокета. Планировщик ОС правильно переключится на другой поток до тех пор, пока ввод-вывод не будет завершен, так что в чем разница? (кроме того, что вы не должны создавать потоки 2k для этого ..)

Редактировать: mysql_real_connect() поддерживает параметр сокета UNIX. Вы можете, предположительно, прочитать себя с порта сервера mysql и записать в этот сокет UNIX только с помощью ASIO. Как проксификация.

0

Существует проект под названием DBSlayer, который помещает еще один слой перед MySQL, с которым вы разговариваете через JSON. http://code.nytimes.com/projects/dbslayer

1

[Запуск синхронного разъема в резьбе не вариант Подумайте об этом: libmysqlclient/mysqlclient.dll вы используете делает синхронные вызовы сокета. Планировщик ОС правильно переключится на другой поток до тех пор, пока ввод/вывод не будет завершен]

Это прослушивание меня! - «другой поток» может быть легко второй синхронизацией. соединение с mysql и должно обрабатываться mysql так же, как и другим клиентом? Мой gutfeel заключается в том, что он должен работать с использованием нескольких потоков.

+1

Он будет работать в потоках. Но скажем, что вы хотите иметь 100 подключений против одного или нескольких серверов. Не то, чтобы я предполагал, что кто-то это сделает, но примите его ради аргумента. Должен ли я затем перевернуть 100 потоков (или даже только 10 в пуле потоков ...)? Это довольно большие накладные расходы. – 2008-10-02 13:38:44

1

MySQL Connector/C++ является C++ реализация JDBC 4.0

справочными клиентами, использующими MySQL Connector/C++, являются: - OpenOffice - Workbench MySQL

Подробнее: http://forums.mysql.com/read.php?167,221298

0

вы рассмотрели с помощью libdrizzle?Я использовал только старую версию, с того момента, когда это был отдельный проект от дождя, и я протестировал асинхронные функции запросов, но я никогда не делал никаких реальных ориентиров, которые стоит упомянуть.

+0

Я сделал быстрый взгляд на проект «Дождь», когда я создал этот вопрос (см. мой комментарий к принятому ответу). В то время у них был асинхронный клиент. Я действительно не знаю, как это закончилось. – 2011-06-03 08:12:37

Смежные вопросы