CodeIgniter 多个数据库持久连接?
Posted
技术标签:
【中文标题】CodeIgniter 多个数据库持久连接?【英文标题】:CodeIgniter Multiple Databases Persistent Connection? 【发布时间】:2011-08-09 05:40:05 【问题描述】:我在我的 CodeIgniter 应用程序中使用了多个数据库,并且已经阅读了很多关于应该关闭的持久连接。
为什么推荐此措施,并且在 最新 版本 2.0.2 中仍然需要此措施吗?
我正在做类似的事情
$db2 = $this->load->database("dbname", TRUE);
【问题讨论】:
参见:[CodeIgniter 中的 pconnect 选项][1]:***.com/questions/1830830/… 嗯,这显然是重复的。 @spont4e - 不错的收获! 有人可以关闭这个,因为它已经得到回答,虽然可能不是 OP 希望的答案。 我猜是因为以前的答案最近被模组删除了,因为粗体项目,这不被认为是重复的。 【参考方案1】:代码点火器文档没有解释
不幸的是,2.0.2 的 Code Igniter 文档没有解释为什么应该关闭它们。它只是说明有一个设置可以这样做。这样做的原因很可能是因为它实际上不是 Code Igniter 功能,而是更多的底层 php/mysql 功能。 PHP有一个非常好的和详细的page in their documentation关于持久连接。
来自服务器管理员(我)的解释
基本上,它归结为性能。如果您有少量用户位于加利福尼亚并且您的 MySQL 数据库服务器在瑞士,那么与 MySQL 服务器建立连接将产生大量开销(与加利福尼亚同一服务器上的 MySQL 连接相比) )。拥有持久连接将避免每次您想使用 MySQL 查找内容时重新连接的开销。还有许多其他可能导致连接开销的问题,例如服务器或数据库的配置方式。 除了性能之外,如果连接关闭不当也会导致问题,从而导致表锁定。
为什么建议关闭
此设置对于大多数服务器来说并不理想的原因是,如果您有超过 60 个用户同时使用您的数据库,或者您的 MySQL 配置设置为最大连接数,您将很快达到maximum number of connections这可能会导致数据库错误或服务器崩溃等。
【讨论】:
【参考方案2】:这是默认数据库:$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 );在 database.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('database', 'email', 'session');默认数据库通过自动加载数据库库可以正常工作,但第二个数据库通过使用模型和控制器中的构造函数加载和连接... db2 = $this->load->database('second', TRUE); 公共函数 getsecondUsers() $query = $this->db2->get('members');返回$查询->结果(); ?>
【讨论】:
以上是关于CodeIgniter 多个数据库持久连接?的主要内容,如果未能解决你的问题,请参考以下文章
HTTP协议学习笔记---HTTP持久连接和如何正确地关闭HTTP连接
多个 NSPersistentStoreCoordinator 实例可以连接到同一个底层 SQLite 持久存储吗?