【问题标题】:C API and getting raw socketC API 和获取原始套接字
【发布时间】:2011-11-18 13:54:07
【问题描述】:

我正在编写需要与 mysql 通信的应用程序。它是一个使用 epoll linux 系统调用来多路复用客户端的单线程应用程序,但问题是每当我对数据库进行(大量)查询时,一切都会停止。所以我想从 mysql 获取实际的套接字并将其放入我的 epoll 中,这样我也可以多路复用数据库。这可能吗?

【问题讨论】:

    标签: mysql c multiplexing


    【解决方案1】:

    文章http://jan.kneschke.de/2008/9/9/async-mysql-queries-with-c-api/ 回答了这个问题。适用于 MySQL 5.6。

    【解决方案2】:

    比这要复杂一些。如果“一切都停止了”(只能猜测您在技术上的意思),那么您的 MySQL 服务器可能已经超载。多路复用单个连接不仅可能不起作用,而且也无法解决这个根本问题。

    相反,请修复您的查询和索引,以免发生巨大的表扫描和文件排序。

    【讨论】:

    • 对 db 的请求有 7 个,其中只有 2 个是慢的,其他的使用不同的表并且非常简单(立即执行)。进一步优化它们是不可能的,它们检查了近 30 万条记录(数据传输日志),所以我的问题在于这种多路复用。没有别的了。
    • @Daniel:30 万条记录根本不算多。如果这使“一切都停滞不前”,那么您的查询和索引就有问题了。 是你的问题。没有别的了。
    • (正如我已经说过的,任意多路复用到数据库的连接不会使数据库执行得更快。你要做的就是破坏东西。)
    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多