7

我在我的 CodeIgniter 应用程序中使用了多个数据库,并且已经阅读了很多应该关闭持久连接的内容。

为什么建议采用此措施,并且在最新版本 2.0.2 中仍然需要此措施?

我正在做类似的事情

$db2 = $this->load->database("dbname", TRUE);
4

2 回答 2

1

代码点火器文档没有解释

不幸的是,2.0.2 的 Code Igniter 文档没有解释为什么应该关闭它们。它只是说明有一个设置可以这样做。这样做的原因很可能是因为它实际上不是 Code Igniter 功能,而是更多的底层 PHP/MySQL 功能。PHP 在其关于持久连接的文档中有一个非常好的和详细的页面。

服务器管理员的解释(我)

基本上,它归结为性能。如果您有少量用户位于加利福尼亚并且您的 MySQL 数据库服务器在瑞士,那么与 MySQL 服务器建立连接将产生大量开销(与加利福尼亚同一服务器上的 MySQL 连接相比) )。拥有持久连接将避免每次您想使用 MySQL 查找内容时重新连接的开销。还有许多其他可能导致连接开销的问题,例如服务器或数据库的配置方式。除了性能之外,如果连接关闭不当也会导致问题,从而导致锁定表。

为什么建议关闭

此设置对于大多数服务器来说并不理想的原因是,如果您有超过 60 个用户同时使用您的数据库,或者您的 MySQL 配置设置为最大连接数,您将很快达到最大连接数,这可能导致数据库错误或服务器崩溃等。

于 2015-03-26T14:29:36.530 回答
0

这是默认数据库: $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', ' database' => 'mydatabase', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => TRUE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat​​' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE ); 在数据库底部添加另一个数据库。php 文件 $db['second'] = array('dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' = > 'mysecond', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => TRUE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE , 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat​​' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, ' stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE ); 在 autoload.php 配置文件中 $autoload['libraries'] = array(' 数据库','电子邮件','会话');默认数据库通过自动加载数据库可以正常工作,但第二个数据库通过使用模型和控制器中的构造函数加载和连接... db2 = $this->load->database('second', TRUE); } 公共函数 getsecondUsers(){ $query = $this->db2->get('members'); 返回$查询->结果();} } ?>

于 2018-08-07T08:53:54.520 回答