是否存在可在C或C ++应用程序中使用的Mysql的任何异步连接器?我正在寻找可以插入reactor pattern Boost.Asio中的{{3}}内容的内容。
[编辑:]在线程中运行同步连接器不是一种选择。
答案 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
答案 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吗?我只使用了一个旧版本,从一个单独的项目到毛毛雨时,我测试了异步查询功能,但我从未做过任何值得一提的实际基准测试。