【问题标题】:mysql.h persistent connectionmysql.h 持久连接
【发布时间】:2013-01-22 11:16:01
【问题描述】:

是否可以通过 MySQL C API like those PHP provides 获得持久连接?如果有,怎么做?

【问题讨论】:

    标签: mysql c persistent-connection


    【解决方案1】:

    MySQL C API 没有持久连接功能,因为它不需要它。您通过它创建的所有连接都是持久的。也就是说,只要您的程序运行,它们就会一直存在,除非您主动关闭它们或服务器丢弃它们。

    PHP 需要持久连接的唯一原因是它是 HTTP 工作方式的产物。 PHP 最初是 CGI program,因此 Web 服务器会为每个 HTTP 请求重新启动一切,包括任何数据库连接。这非常耗时,所以他们创建了mod_php,现在几乎每个使用 PHP 的人都在使用它。 HTTP 的无状态特性仍然要求您的 PHP 脚本在每次请求时重新启动,但由于 mod_php 保持加载在 Apache 实例中,它可以执行诸如保持 MySQL 数据库连接打开之类的事情,以供下一个需要它的 PHP 脚本使用。

    所有这些都引出了一个问题,为什么您认为您需要持久的数据库连接?您是否在每次需要时都重新启动您的 C 程序?如果是这样,那么修复它可能就是您需要做的,而不是寻找“缺失”的 C API 功能。例如,如果你正在用 C 编写一个 Web 应用程序,你可以rework it as an Apache module,就像独立的 CGI PHP 变成了 mod_php。

    但是,永远记住:

    The First Rule of Program Optimization:不要这样做。程序优化的第二条规则(仅供专家使用!):不要这样做。”

    ——迈克尔·A·杰克逊

    在你拥有benchmarkedprofiled 之前优化你的程序是愚蠢的。向我们展示您的设计和测量结果,然后询问可以做什么。不要先要求技术修复。设计修复可能会有更多帮助。

    【讨论】:

    • 非常感谢您提供的深入知识!我想我对如何编写这个有更好的想法,一个不断运行的应用程序,而不是在每个请求 ajax 请求时打开和关闭的东西,就像你说的模块一样。你介意帮助解决这个问题stackoverflow.com/questions/14742301/… 吗?我可能也错误地接近了,哈哈
    【解决方案2】:

    当然——通过不关闭连接。 PHP 的“持久连接”所做的只是保持连接打开并将其重用于后续脚本执行。

    【讨论】:

      猜你喜欢
      • 2017-07-12
      • 2011-03-29
      • 2011-01-16
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多