【发布时间】:2013-01-22 11:16:01
【问题描述】:
是否可以通过 MySQL C API like those PHP provides 获得持久连接?如果有,怎么做?
【问题讨论】:
标签: mysql c persistent-connection
是否可以通过 MySQL C API like those PHP provides 获得持久连接?如果有,怎么做?
【问题讨论】:
标签: mysql c persistent-connection
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·杰克逊
在你拥有benchmarked 和profiled 之前优化你的程序是愚蠢的。向我们展示您的设计和测量结果,然后询问可以做什么。不要先要求技术修复。设计修复可能会有更多帮助。
【讨论】:
当然——通过不关闭连接。 PHP 的“持久连接”所做的只是保持连接打开并将其重用于后续脚本执行。
【讨论】: