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');