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

  • 相关阅读:
    第 15 章 标签页和工具提示插件
    第 14 章 下拉菜单和滚动监听插件
    第 13 章 模态框插件
    第 12 章 列表组面板和嵌入组件
    第 11 章 进度条媒体对象和 Well 组件
    第 10 章 巨幕页头缩略图和警告框组件
    第 9 章 路径分页标签和徽章组件
    lock()与lockInterruptibly()的区别
    MySQL中Innodb的聚簇索引和非聚簇索引
    MySQL使用可重复读作为默认隔离级别的原因
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11428993.html
Copyright © 2011-2022 走看看