PHP 使用多个数据库的 Codeigniter - 有很多连接
PHP Codeigniter using Multiple Databases - is to many connections
我想将我在 CodeIgniter 3 中的应用程序从一个数据库更改为两个数据库。我正在使用 Aurora AWS,所以我需要将数据库拆分为两个实例,一个用于读取,另一个用于写入。
我想我做了所有,但在拆分为两个实例后,我的数据库连接在相同的流量中增加得非常高。我认为这是因为在我加载的每个模型中构建第二个数据库($this->db2 = $this->load->database('writer_instance', TRUE);)。
红色区域是我拆分成两个实例的时候。
蓝色区域是我没有拆分成两个实例的时候。
我应该怎么做才能让连接数不增加?
是否有任何选项可以将编写器实例作为 reader 实例加载一次?
这是我的代码:
我加入database.php
$active_group = 'reader_instance';
$query_builder = TRUE;
$db['reader_instance'] = array(
'dsn' => '',
'hostname' => '*',
'username' => '*',
'password' => '*',
'database' => '*',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'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,
'port' => 3306
);
$db['writer_instance'] = array(
'dsn' => '',
'hostname' => '*',
'username' => '*',
'password' => '*',
'database' => '*',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'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,
'port' => 3306
);
下一步在加载第二个数据库时在每个模型中添加构造。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class ActionModerator_model extends CI_Model {
function __construct(){
parent::__construct();
// db - reader_instance
$this->db2 = $this->load->database('writer_instance', TRUE);
}
public function add($object)
{
$this->db2->insert( 'parameter_action' , $object );
}
public function get($id_group)
{
$this->db->select('id, name');
$this->db->where( 'id_group' , $id_group );
$q = $this->db->get( 'user' );
$q = $q->result();
return $q;
}
}
这是我自己做的。我创建库:
<?php
class Databaseloader {
public function __construct() {
$this->load();
}
public function load() {
$CI = &get_instance();
$CI->db = $CI->load->database('reader_instance', TRUE);
$CI->db2 = $CI->load->database('writer_instance', TRUE);
}
}
下一步 autoload.php 将变量 $autoload['libraries'] 数据库替换为 databaseloader 并删除每个模型中的加载数据库。
$autoload['libraries'] = array('databaseloader');
我想将我在 CodeIgniter 3 中的应用程序从一个数据库更改为两个数据库。我正在使用 Aurora AWS,所以我需要将数据库拆分为两个实例,一个用于读取,另一个用于写入。
我想我做了所有,但在拆分为两个实例后,我的数据库连接在相同的流量中增加得非常高。我认为这是因为在我加载的每个模型中构建第二个数据库($this->db2 = $this->load->database('writer_instance', TRUE);)。
红色区域是我拆分成两个实例的时候。 蓝色区域是我没有拆分成两个实例的时候。
我应该怎么做才能让连接数不增加? 是否有任何选项可以将编写器实例作为 reader 实例加载一次?
这是我的代码:
我加入database.php
$active_group = 'reader_instance';
$query_builder = TRUE;
$db['reader_instance'] = array(
'dsn' => '',
'hostname' => '*',
'username' => '*',
'password' => '*',
'database' => '*',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'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,
'port' => 3306
);
$db['writer_instance'] = array(
'dsn' => '',
'hostname' => '*',
'username' => '*',
'password' => '*',
'database' => '*',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'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,
'port' => 3306
);
下一步在加载第二个数据库时在每个模型中添加构造。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class ActionModerator_model extends CI_Model {
function __construct(){
parent::__construct();
// db - reader_instance
$this->db2 = $this->load->database('writer_instance', TRUE);
}
public function add($object)
{
$this->db2->insert( 'parameter_action' , $object );
}
public function get($id_group)
{
$this->db->select('id, name');
$this->db->where( 'id_group' , $id_group );
$q = $this->db->get( 'user' );
$q = $q->result();
return $q;
}
}
这是我自己做的。我创建库:
<?php
class Databaseloader {
public function __construct() {
$this->load();
}
public function load() {
$CI = &get_instance();
$CI->db = $CI->load->database('reader_instance', TRUE);
$CI->db2 = $CI->load->database('writer_instance', TRUE);
}
}
下一步 autoload.php 将变量 $autoload['libraries'] 数据库替换为 databaseloader 并删除每个模型中的加载数据库。
$autoload['libraries'] = array('databaseloader');