3

我希望龙卷风支持异步 sql 数据库操作,在我阅读了源代码之后,

http://www.tornadoweb.org/documentation/_modules/tornado/database.html#Connection

叹息,他们正在阻止版本。这里有一些选择。

计划A:找到一组类似于mysqldb模块的api,除了他们使用回调来返回reuslt.sorry我没有找到一个显示他们的api可以处理非阻塞mysql操作的例子

B方案:使用block版本。听说tornado的作者建议开发者使用block版本,并且极大的优化你的sql查询以缩短阻塞周期。

在我的情况下:服务器需要在高峰时段每秒处理接收 2k 请求,其中大多数需要从数据库查询和更新,建议每个操作需要 10 毫秒,10 毫秒 * 2k 超过 20 秒,那将是一场噩梦。在多线程编程中至少我可以建立更多的连接以获得更多的平均响应时间。

也许我在这里错过了一些观点,我对后端开发没有太多经验。但是我仍然认为使用阻塞 io api 是一个糟糕的想法,而框架是非阻塞的。

方案C:放弃MySql 使用mongoDB,听说mongoDB 有一个异步Python 实现api 叫asyncmongo,但我不确定学习mongoDB 的风险,将mongoDB 作为我们的业务选择

4

1 回答 1

1

另一种选择是设置多处理 ( http://docs.python.org/library/multiprocessing.html?highlight=multiprocessing#multiprocessing ) 并将进程中的一个用作数据库的队列管理器。

将多处理与高效的 SQL 查询相结合,您应该将整体影响降至最低。阻塞调用只会在 DB Processing Queue Manager 进程上完成,应用程序的其余部分可以运行而不会被阻塞。唯一受影响的人是那些试图同时运行数据库查询的人。

于 2012-09-02T10:27:58.107 回答