codeigniter - 使用 codeigniter 实现读取副本

标签 codeigniter amazon-rds

我正在使用 codigniter 框架开发 PHP 应用程序。并使用亚马逊只读副本设置。我需要一种方法来处理通过只读数据库的所有选择查询和通过主数据库处理所有更新相关的查询。以下是我在脚本中使用的当前用法。

数据库配置文件

$db['default']['hostname'] = 'master_db_host';
$db['default']['username'] = 'dbuser';
$db['default']['password'] = 'dbpassword';
$db['default']['database'] = 'db_name';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

模型脚本

class replica_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    public function write($data)
    {
        $this->db->insert('dumy', $data);
        return $this->db->insert_id();
    }

    public function read()
    {
        $query = $this->db->get("dumy");
        return $query->result();
    }

}

有人可以帮我修改脚本以基于读写访问主副本吗?

最佳答案

我们可以使用 codeigniter 处理多个数据库。首先我们可以看看配置文件需要如何设置。

$active_group = 'default';
$active_record = TRUE;

//Master DB config values
$db['default']['hostname'] = 'master_db_host';
$db['default']['username'] = 'db_user';
$db['default']['password'] = 'db_pass';
$db['default']['database'] = 'db_name';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;


//Replica DB config values
$db['read_replica']['hostname'] = 'replica_db_host';
$db['read_replica']['username'] = 'db_user';
$db['read_replica']['password'] = 'db_password';
$db['read_replica']['database'] = 'db_name';
$db['read_replica']['dbdriver'] = 'mysql';
$db['read_replica']['dbprefix'] = '';
$db['read_replica']['pconnect'] = FALSE;
$db['read_replica']['db_debug'] = TRUE;
$db['read_replica']['cache_on'] = FALSE;
$db['read_replica']['cachedir'] = '';
$db['read_replica']['char_set'] = 'utf8';
$db['read_replica']['dbcollat'] = 'utf8_general_ci';
$db['read_replica']['swap_pre'] = '';
$db['read_replica']['autoinit'] = TRUE;
$db['read_replica']['stricton'] = FALSE;

参数“$db['read_replica']['pconnect']”在主数据库配置上应为 true,在副本配置上应为 false。否则,当我们启用副本数据库时,主数据库配置也会被副本配置覆盖。

然后模型的使用将如下所示。

class Replica_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
        $this->db_replica = $this->load->database('read_replica',TRUE);
    }

    public function write($data)
    {
        $this->db->insert('dumy', $data);
        return $this->db->insert_id();
    }

    public function read()
    {
        $query = $this->db_replica->get("dumy");
        return $query->result();
    }

}

关于codeigniter - 使用 codeigniter 实现读取副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706567/

相关文章:

sql-server - 如何清除 SQL Server RDS 实例上的 SQL Server 数据缓存?

amazon-web-services - 删除 AWS 中的自动数据库快照

sql-server - 如何使用 Amazon AWS RDS 安装 "Advanced Analytics Extensions"?

amazon-ec2 - CloudFormation Drupal 模板在哪里创建 MySQL 数据库?

php - mysql | mysql | Codeigniter Active Records 正在添加额外的反勾号以进行查询

php - Codeigniter $this->email->send() 在 mail() 时不工作

Mysql 只允许用户从特定的 DNS 连接

php - 我的更新查询在 Codeigniter 上不起作用

php - Jquery关闭事件在弹出后不起作用

php - 如何计算代码点火器中的总段数?