2008-09-01 61 views

回答

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的异步服务。你需要了解ODBC API。

2

我有一个非常不同的技术类似的问题:Twisted python(基于reactor的IO)和sqlAlchemy(??)。在寻找解决方案时,我发现了一个sAsync项目,它为sqlAlchemy创建了一个单独的线程,然后响应请求。由于ASIO基于低级操作系统功能(如aio_read()或ReadFileEx()等)和OS级反应器(或Windows的情况下的proactor),所以我认为你不会有另一个机会而不是通过类似的手段来模拟“异步性”。

运行中的线程同步连接器是不是一种选择

想想吧:libmysqlclient/mysqlclient.dll你使用使得同步套接字调用。操作系统调度程序将正确切换到另一个线程,直到I/O完成,所以有什么区别? (除了你不应该为此做2k线程..)

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

1

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

这是在烦我! - “另一个线程”可以轻松地进行第二次同步。连接到mysql,应该由mysql处理,就像它将另一个客户端一样?我的感觉是它应该使用多线程工作。

+1

它将在线程中工作。但是可以说,你希望与一台或多台服务器建立100个连接。不是我想象任何人会这样做,但为了争论而接受它。我应该旋转100个线程(或者甚至只有10个线程池)?这是相当大的开销。 – 2008-10-02 13:38:44

0

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

+0

我已经采用当我创建这个问题时,快速浏览Drizzle项目(请参阅我的评论以接受答案)。那时他们正在进行一个异步客户端。我真的不知道结果如何。 – 2011-06-03 08:12:37