zoukankan      html  css  js  c++  java
  • mycat中间件进行MySQL数据库的垂直拆分

    垂直拆分——分库

    一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类, 分布到不同 的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:

     

    系统被切分成了,用户,订单交易,支付几个模块。

    如何划分表

    一个问题:在两台主机上的两个数据库中的表,能否关联查询? 答案:不可以关联查询。

    分库的原则:有紧密关联关系的表应该在一个库里,相互没有关联关系的表可以分到不同的库里

    #客户表    rows:20万
    CREATE TABLE customer(
    id INT AUTO_INCREMENT, NAME VARCHAR(200), PRIMARY KEY(id)
    );

    #订单表 rows:600万CREATE TABLE orders( id INT AUTO_INCREMENT, order_type INT, customer_id INT, amount DECIMAL(10,2), PRIMARY KEY(id)

    );

    
    

    #订单详细表  rows:600万

    CREATE TABLE orders_detail(

    id INT AUTO_INCREMENT, detail VARCHAR(2000), order_id INT,

    PRIMARY KEY(id)

    );

    #订单状态字典表 rows:20 CREATE TABLE dict_order_type(

    id INT AUTO_INCREMENT,

    order_type VARCHAR(200), PRIMARY KEY(id)

    );

    以上四个表如何分库?

    由于分库后的位于不同库里面的表是不能进行关联查询的,所以

    客户表分在一个数据库,另外三张都需要关联查询,分在另外一个数据库。

    实现分库

    1、 修改 schema 配置文件

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    <table name="customer" dataNode="dn2" ></table>
    </schema>
    <dataNode name="dn1" dataHost="host1" database="orders" />
    <dataNode name="dn2" dataHost="host2" database="orders" />
    <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="1"
    slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM1" url="192.168.140.128:3306" user="root" password="123123">
    </writeHost>

    </dataHost> <dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM2" url="192.168.140.127:3306" user="root" password="123123"> </writeHost> </dataHost>

    #如下图

    2、 新增两个空白库

     分库操作不是在原来的老数据库上进行操作,需要准备两台机器分别安装新的数据库

    #在数据节点dn1、dn2 上分别创建数据库orders CREATE DATABASE orders;

    3、 启动 Mycat

    ./mycat console

    4、 访问 Mycat 进行分库

    #访问Mycat
    mysql -umycat -p123456 -h 192.168.140.128 -P 8066
    #切换到 TESTDB #创建 4 张表
    #查看表信息,可以看到成功分库

  • 相关阅读:
    Go 环境变量相关操作
    Go命令行参数解析flag包
    go sync.once用法
    使用go语言编写IOS和Android程序
    go map的使用
    go runtime.Gosched()的作用分析
    go中的读写锁RWMutex
    go互斥锁Mutex
    go import使用及. _的作用解析
    利用channel在goroutins之间控制同步和传递数据
  • 原文地址:https://www.cnblogs.com/yanl55555/p/13607795.html
Copyright © 2011-2022 走看看