是否存在可在 C 或 C++ 应用程序中使用的 Mysql 异步连接器?我正在寻找可以插入用Boost.Asio编写的反应器模式的东西。
[编辑:] 在线程中运行同步连接器不是一种选择。
是否存在可在 C 或 C++ 应用程序中使用的 Mysql 异步连接器?我正在寻找可以插入用Boost.Asio编写的反应器模式的东西。
[编辑:] 在线程中运行同步连接器不是一种选择。
http://forums.mysql.com/read.php?45,183339,183339 享受
更新了原始文章的链接,展示了如何进行异步 mysql 查询:
http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/
我在使用非常不同的技术时遇到了类似的问题:Twisted python(基于反应器的 IO)和 sqlAlchemy(??)。在寻找解决方案时,我发现了一个 sAsync 项目,它只是为 sqlAlchemy 创建了一个单独的线程,然后响应请求。
鉴于 ASIO 基于低级 OS 功能(例如 aio_read() 或 ReadFileEx() 等)和 OS 级反应器(或在 Windows 的情况下的前摄器),我认为除了模拟 '异步'通过类似的方式。
在线程中运行同步连接器不是一种选择
想一想:libmysqlclient / mysqlclient.dll
您正在使用的进行同步套接字调用。操作系统调度程序会正确切换到另一个线程,直到 I/O 完成,那么有什么区别呢?(除了你不应该为此创建 2k 线程的事实之外......)
编辑:mysql_real_connect() 支持 UNIX 套接字参数。据说您可以从 mysql 服务器端口读取自己并仅使用 ASIO 写入该 UNIX 套接字。就像代理一样。
[ 在线程中运行同步连接器不是一种选择考虑一下:您正在使用的 libmysqlclient / mysqlclient.dll 进行同步套接字调用。操作系统调度程序将正确切换到另一个线程,直到 I/O 完成]
这让我很烦!- “另一个线程”很容易成为第二次同步。连接到 mysql,并且应该由 mysql 处理,就像它完全可以处理另一个客户端一样?我的直觉是它应该使用多个线程工作。
MySQL Connector/C++ 是 JDBC 4.0 的 C++ 实现
使用 MySQL Connector/C++ 的参考客户有: - OpenOffice - MySQL Workbench
了解更多: http: //forums.mysql.com/read.php?167,221298
我知道这是一个老问题,但考虑看看新的 Boost.Mysql 库:https ://anarthal.github.io/mysql/index.html
我认为唯一的解决方案是创建一个包装标准连接器的异步服务。不过,您需要了解 ODBC API。
有一个名为 DBSlayer 的项目,它在 MySQL 前面放置了另一层,您可以通过 JSON 与之对话。http://code.nytimes.com/projects/dbslayer
你考虑过使用libdrizzle吗?我只使用了一个旧版本,从它与 drizzle 的单独项目开始,我测试了异步查询功能,但我从未做过任何值得一提的实际基准测试。