我不知道PDO的连接池是如何工作的,而且我无法进行搜索。
首先,为清楚起见,PDO的连接池是自动的吗?
如果没有,我如何在AJAX页面上使用它?
我已经计算了我本地wampserver开发的时间成本,即通过mysqli以10ms的速度建立数据库连接,并且我正在尝试将等待时间尽可能接近0。这是我最后一个问题。
答案 0 :(得分:3)
同样在@fabian给出的link上你可以看到以下内容:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>
Note: If you wish to use persistent connections, you must set PDO::ATTR_PERSISTENT in the array of driver options passed to the PDO constructor. If setting this attribute with PDO::setAttribute() after instantiation of the object, the driver will not use persistent connections.
答案 1 :(得分:2)
如果您正在谈论持久性连接,请查看此处:http://php.net/manual/en/pdo.connections.php
持久连接是否在不同的AJAX请求中保持打开状态?
是的,以及它们永远不会被重复使用的风险。感谢@carefulnow。我在这里引用他的评论:
持久连接和连接池不是一回事 连接池创建了许多连接,然后应用程序只抓取其中一个已建立的连接。持久连接确实建立了新连接,但除非明确告知(正常连接将在脚本末尾关闭),否则它们不会关闭。如果不小心使用,持久连接是危险的,因为大多数数据库实现最大连接数,并且在命中时拒绝进一步连接。对于大多数情况,正常连接(只需使用DSN和登录详细信息调用PDO构造函数)就可以了。
我将通过显示PHP代码以及MariaDB控制台监视器中的结果连接计数来解释它。查看以下屏幕截图,并注意右下角的“运行计数”。您将看到使用持久连接时,连接不会关闭,而是进入睡眠模式。忽略连接#231,这是控制台监视器。 http://i.imgur.com/IL42tjF.png,http://i.imgur.com/aDvl7F7.png,http://i.imgur.com/IuFEEvO.png。如您所见,时间列表示不活动的长度,而不是连接的时间长度,因此控制台监视器的时间始终为零,因为我刚刚执行了SHOW PROCESSLIST;。我希望这会清除一切,有时数据库连接管理非常棘手。
所以看截图是问题是开放的,如何再次获取这些持久连接。 StackOverflow上的一些答案说,它们是在线程级别缓存的,所以如果你有多个线程(这是非常期待的),那么你会获得很多连接。这样就有可能遇到mysql的连接限制。在使用持久性连接之前,请确保您了解它们是如何工作的(我没有,但似乎@carefulnow: - ))
是否可以将持久连接设置为过期?
PHP doc说它们是缓存的,因此我认为它们在一段时间后就会被清理。
答案 2 :(得分:0)
Pdopersist使用具有多个mysql请求的任何URL作为一个连接。如果页面重新加载或使用pdo连接访问任何其他php页面,则仅建立新的pdo连接。我们需要服务器中已经创建的静态SQL连接,并将其重新用于页面。就像页面加载之前的全局声明一样。只能与带有Express的节点mysql包一起使用。在express js中,我们可以将mysql pool连接配置为全局声明。
您可以在带有MySQL的nodejs中使用连接池,并表示npm模块。然后在节点中设置一个http服务器,然后在发布请求中通过{strong> API 发出请求,例如http://127.0.0.1:1000/getdata。然后使用带有流上下文的file()方法将php用作获取器,以创建发布请求。不要使用curl,因为它需要更多的时间来执行。使用while语句检查快速js服务器返回的数据
我通过移动设备创建了此信息,因此无法提供使用说明的代码。如果有人需要示例代码。我将发布到GitHub存储库。分享您的评论