MYSQL / R

게시물 검색
전체 2건 1 페이지
  • CodeIgniter/ActiveRecord setup to use master + slave db 복제
    CODEIGNITER/ACTIVERECORD SETUP TO USE MASTER + SLAVE DB REPLICATIONAUG26This is how you can set up CodeIgniter to direct mysql queries to different read/write hosts in your db replicated environment, using a db_slave for your SELECT’s, and a db_master for the INSERT/UPDATE/DELETE queries.File: application/config/database.phpSpecify the different database hosts in the database config file:< ?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    $active_group = "master";
    $active_record = TRUE;

    # db_master
    $db['master']['hostname'] = "host1";
    $db['master']['username'] = "username";
    $db['master']['password'] = "password";
    $db['master']['database'] = "exampledb";
    $db['master']['dbdriver'] = "mysql";
    $db['master']['dbprefix'] = "";
    $db['master']['pconnect'] = FALSE;
    $db['master']['db_debug'] = TRUE;
    $db['master']['cache_on'] = FALSE;
    $db['master']['cachedir'] = "";
    $db['master']['char_set'] = "utf8";
    $db['master']['dbcollat'] = "utf8_general_ci";

    #db_slave
    $db['slave']['hostname'] = "host2";
    $db['slave']['username'] = "username";
    $db['slave']['password'] = "password";
    $db['slave']['database'] = "exampledb";
    $db['slave']['dbdriver'] = "mysql";
    $db['slave']['dbprefix'] = "";
    $db['slave']['pconnect'] = FALSE;
    $db['slave']['db_debug'] = TRUE;
    $db['slave']['cache_on'] = FALSE;
    $db['slave']['cachedir'] = "";
    $db['slave']['char_set'] = "utf8";
    $db['slave']['dbcollat'] = "utf8_general_ci";
    ...File: application/core/My_Model.phpAdd this into My_Model:< ?php

    class MY_Model extends CI_Model {
    function __construct(){
    parent::__construct();
    $this->db_master = $this->load->database('default', TRUE);
    $this->db_slave = $this->load->database('default', TRUE);
    }


    }File: application/models/example_model.phpUse the read/write queries in your models like this:< ?php
    class example_model extends MY_Model {

    function example_model()
    {
    parent::MY_Model();
    }

    # read query
    function getSomething()
    {
    $query = $this->db_slave->get('mytable'); // db_slave
    return $query->result();
    }

    # write query
    function insertSomething()
    {
    $this->db_master->insert('mytable', $_POST); // db_master
    return $this->db_master->insert_id();
    }That´s it!…
    작성자최고관리자 시간 03-22 조회 2102
  • merge table 과 partition table
    merge 테이블은 구간적용없이 여러개의 테이블을 합쳐서 사용하는 개념입니다.

    여러개의 테이블에 각각 insert된 data들을 합쳐서 볼 때 사용합니다.

    어느 테이블 위치에 들어갈지를 DB가 자동으로 결정하지 않습니다.

    수동으로 특정 위치에 insert 하여야 합니다.

    view, union all 개념이기 때문에,

    예를 들어 월단위 데이터를 1~4월 나눠서 네개 테이블로 구성하고,

    구성된 네개의 테이블을 merge 테이블로 구성했을때,

    1월 데이터가 들어오면 1월 테이블에 insert하지 않고 merge table에 했을때

    어디에 들어갈 지 알 수 없습니다.(옵션을 통해 처음, 마지막 테이블에 들어가게 할 수 있습니다)



    partiton 테이블은 구간 및 특정값 지정을 통해 데이터는 분산시키는 개념입니다.

    하나의 partition 테이블에 insert를 했을 경우 알아서 위치를 지정해주며,

    데이터를 셀렉할 때도 - 위예시를 통해 알아보면 -

    1월 데이터를 셀렉트 하면 내부적으로 1월 파티션만 조회합니다.



    결과적으로

    partition 테이블은 데이터를 넣을때 자동으로 원하는 위치에 넣어주고,

    꺼낼때 대략적인 위치를 파악하여 scanning 범위를 좁혀주나,



    merge 테이블은 데이터를 원하는 위치에 넣기 힘들고,

    꺼낼때는 - indexing 제외 - scanning 범위를 줄일 수 없는 테이블입니다.…
    작성자최고관리자 시간 02-01 조회 1357

회원로그인

Copyright © 2001-2016 ITNANUM. All Rights Reserved..