zoukankan      html  css  js  c++  java
  • mysql05

    mysql 数据切分


    通过特定手段,将我们放到同一个数据库中的数据发散到多个数据库中,或分散到多个节点

    优点
    分散单台设备的负载
    提高数据的安全性

    缺点
    增加了系统的复杂度
    引入分布式事务
    跨节点join
    跨节点的排序分页
    多数据管理

    水平拆分
    垂直拆分

    多租户
    独立数据库 隔离性最好 安全性最高 数据库备份和恢复方便,价格最高
    共享数据库,独立数据架构
    共享数据库 共享数据架构 隔离性最差 安全性最差,恢复性差,最便宜

    数据切分策略

    分片枚举

    hash

    范围约定

    取模

    按日期分片

    分布式数据库

    在物理上分布,逻辑上集中

    把组件分布在网络的不同节点上,组件之间通过传递消息进行通信。核心就是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其对高并发或者大数据量的任务

    特性
    透明性
    扩展性
    可靠性
    高性能

    Mycat全局表

    全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性

    全局表的查询操作,只从一个节点获取

    全局表可以跟任何一个表进行 JOIN 操作

    <table name="mytable" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3"/>

    对Select操作,mycat会随机现在一个节点输出结果内容;
    对Insert-Update-Delete操作,Mycat会操作所有节点

    mycat er 表

    mycat节点 192.168.239.140

    修改schema.xml

     1 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
     2                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
     3                 <heartbeat>select user()</heartbeat>
     4 
     5                 <writeHost host="hostM1" url="localhost:3306" user="scos"
     6                                    password="scos">
     7 
     8                 <readHost host="hostS2" url="localhost:3306" user="scos" password="scos" />
     9                 </writeHost>
    10 
    11         </dataHost>

    ./mycat console

    customer表与子表orders和order_items的关系如下

     1 <table name="customer" primaryKey="ID" dataNode="dn1,dn2"
     2                            rule="sharding-by-intfile">
     3                         <childTable name="orders" primaryKey="ID" joinKey="customer_id"
     4                                                 parentKey="id">
     5                                 <childTable name="order_items" joinKey="order_id"
     6                                                         parentKey="id" />
     7                         </childTable>
     8                         <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
     9                                                 parentKey="id" />
    10                 </table>

    查看rule.xml

    1         <tableRule name="sharding-by-intfile">
    2                 <rule>
    3                         <columns>sharding_id</columns>
    4                         <algorithm>hash-int</algorithm>
    5                 </rule>
    6         </tableRule>

    mysql -u root -p -h192.168.239.140 -P8066

     1 创建表
     2 create table customer (id int PRIMARY KEY,name VARCHAR(10),sharding_id INT);
     3 create table orders (id int PRIMARY KEY,name VARCHAR(10),customer_id INT);
     4 create table order_items (id int PRIMARY KEY,order_id int );
     5 
     6 
     7 INSERT into customer (id,name,sharding_id) values (1,'xiaoming',10000);
     8 explain   INSERT into customer (id,name,sharding_id) values (1,'xiaoming',10000);
     9 
    10 data_node dn1
    11 
    12 insert into orders (id,name,customer_id) VALUES (1,'goods',1);
    13 
    14 INSERT into order_items (id,order_id) VALUES(1,1);

    mysql -uroot -proot 登陆

    1 use db1
    2 show tables;
    3 
    4 customer employee orders

    验证

    1 INSERT into customer (id,name,sharding_id) values (2,'xiaoming',10000);
    2 
    3 explain   INSERT into customer (id,name,sharding_id) values (2,'xiaoming',10000);
    4 
    5 data_node dn2

    另一种方式,客户端组件分片

    sharding JDBC

  • 相关阅读:
    在酷热的就业天气寻找几丝凉意
    《Orange ’ s :一个操作系统的实现 》作者自序
    Windows的设备驱动框架
    Windows的设备驱动框架中的上层与下层模块
    如何搭建自己的开发环境
    数据库设计指南(二)设计表和字段
    软件敏捷架构师
    Struts到JSF/Tapestry
    敏捷开发
    barcode制作条形码及破解
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11428993.html
Copyright © 2011-2022 走看看