异步Mysql连接器

时间:2008-09-01 21:17:07

标签: c++ mysql c asynchronous boost-asio

是否存在可在C或C ++应用程序中使用的Mysql的任何异步连接器?我正在寻找可以插入reactor pattern Boost.Asio中的{{3}}内容的内容。

[编辑:]在线程中运行同步连接器不是一种选择。

8 个答案:

答案 0 :(得分:7)

http://forums.mysql.com/read.php?45,183339,183339 享受

更新了原始文章的链接,显示了如何进行异步mysql查询:

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

答案 1 :(得分:2)

我遇到了类似的问题,技术非常不同:Twisted python(基于reactor的IO)和sqlAlchemy(??)。在搜索解决方案时,我发现了一个sAsync项目,它只是为sqlAlchemy创建了一个单独的线程,然后响应了请求。

鉴于ASIO基于低级操作系统功能(例如aio_read()或ReadFileEx()等)和操作系统级别的反应堆(或者在Windows中的情况下),我认为你没有其他机会通过类似方式模拟“异步”。

  

在线程中运行同步连接器不是一个选项

考虑一下:你正在使用的libmysqlclient / mysqlclient.dll进行同步套接字调用。 OS调度程序将正确切换到另一个线程,直到I / O完成,那么有什么区别? (除了你不应该为此制作2k线程的事实..)

编辑:mysql_real_connect()支持UNIX套接字参数。您可以从mysql服务器端口读取自己,并仅使用ASIO写入该UNIX套接字。就像代理服务一样。

答案 2 :(得分:1)

[在线程中运行同步连接器不是一种选择 想一想:你正在使用的libmysqlclient / mysqlclient.dll进行同步套接字调用。 OS调度程序将正确切换到另一个线程,直到I / O完成]

这让我烦恼! - '另一个线程'可以很容易地成为第二个同步。连接到mysql,应该像mysql一样处理,就像另一个客户端一样?我的观点是它应该使用多个线程。

答案 3 :(得分:1)

MySQL Connector / C ++是JDBC 4.0的C ++实现

使用MySQL Connector / C ++的参考客户是: - OpenOffice - MySQL Workbench

了解详情:http://forums.mysql.com/read.php?167,221298

答案 4 :(得分:1)

我知道这是一个老问题,但考虑查看新的 Boost.Mysql 库:https://anarthal.github.io/mysql/index.html

答案 5 :(得分:0)

我认为唯一的解决方案是创建一个包装standard connector的异步服务。您需要了解ODBC API。

答案 6 :(得分:0)

有一个名为DBSlayer的项目,它通过JSON与MySQL交谈,将另一层放在MySQL前面。 http://code.nytimes.com/projects/dbslayer

答案 7 :(得分:0)

您考虑过使用libdrizzle吗?我只使用了一个旧版本,从一个单独的项目到毛毛雨时,我测试了异步查询功能,但我从未做过任何值得一提的实际基准测试。