mysql数据库分库

总结下最近做项目的心得体会吧,和大家分享下:mysql数据库的分库

我们先看下数据库的分库结构:


mysql数据库分库

分库大概有7,8个库(按区域分库)

config对应分库的配置(黄浦区DB_CONFIG1;浦东新区DB_CONFIG2...),黄浦区的区id是1,浦东新区的区id是2:


mysql数据库分库

//model层读取分库:

class XxxModel {

    /*

     * 新db

     */

     private function iDb($region) {  // 区县id( 区县id拼接成config)

          return M()->db($region, "DB_CONFIG".$region); // db函数在下面model类文件中有定义

     }

      /*

     * 获取日志

     * @param $region  #区域ID

     * @param $uid  #用户ID 

     * @param $coursewareid  #类课程ID

     * return false|array

     */

      public function getRecordByXx($region, $uid, $coursewareid) {

       return $this->iDb($region)->table('xxxx_xxxx_record')->where(array("uid" => $uid, "over_time" => 0, "courseid" => $courseid))->find();

    }

}

// thinkphp框架DB类库(框架自带,无需修改)

class Model {

    // 当前数据库操作对象

    protected $db = null;

    ....

   /**

     * 切换当前的数据库连接

     * @access public

     * @param integer $linkNum  连接序号

     * @param mixed $config  数据库连接信息

     * @param array $params  模型参数

     * @return Model

     */

    public function db($linkNum,$config='',$params=array()){

        static $_db = array();

        if(!isset($_db[$linkNum])) {

            // 创建一个新的实例

            if(!empty($config) && false === strpos($config,'/')) { // 支持读取配置参数

                $config  =  C($config);

            }

            $_db[$linkNum]            =    Db::getInstance($config);

        }elseif(NULL === $config){

            $_db[$linkNum]->close(); // 关闭数据库连接

            unset($_db[$linkNum]);

            return ;

        }

        if(!empty($params)) {

            if(is_string($params))    parse_str($params,$params);

            foreach ($params as $name=>$value){

                $this->setProperty($name,$value);

            }

        }

        // 切换数据库连接

        $this->db   =    $_db[$linkNum];

        return $this;

    }

}

 // 构架思路:

第一:数据库分库按一定的规则分成多个数据库;

第二:在配置文件config里定个多个连接数据库配置的(如上图,对应数据库名字);

第三:model层读取等操作表的时候传入该用户的区县id来定位读取哪个数据库;

第四:在总库里建立表记录所有区县所有用户的的uid,区县id等需要跟分库里表关联的字段;

备注:这里只是提供大概的思路,具体业务流程可变更。。

预报下次要给大家分享的:php实现及大数据量的排名算法

相关推荐