数据分片 50 51 52 53
如何解决并发访问压力?
如何解决单表过大的问题?
什么是分库分表
– 通过某种特定条件,将存放在一个数据库 ( 主机 ) 中的
数据,分散存放到多个数据库 ( 主机 ) 中。
– 已达到分散单台设备负载的效果,即分库分表
– 数据的切分根据其切分规则的类型,分为 2 种切分模
式
– 垂直分割 ( 纵向 ) 和 水平分割 ( 横向 )
垂直分割
• 纵向切分
– 把单一的表,拆分成多个表,并分散到不同的数据库
( 主机 ) 上。
– 一个数据库由多个表构成,每个表对应不同的业务,
可以按照业务对表进行分类,将其分布到不同的数据
库 ( 主机 ) 上,实现专库专用,让不同的库 ( 主机 ) 分
担不同的业务。
水平分割
• 横向切分
– 按照表中某个字段的某种规则,把向表中写入的记录
分散到多个库 ( 主机 ) 中。
– 简单来说,就是按照数据行切分,将表中的某些行存
储到指定的数据库 ( 主机 ) 中。
软件介绍
• Mycat 是基于 Java 的分布式数据库系统中间层,为
高并发下的分布式提供解决方案
– 支持 JDBC 形式连接
– 支持 MySQL 、 Oracle 、 Sqlserver 、 Mongodb 等
– 提供数据读写分离服务
– 可以实现数据库服务器的高可用
– 提供数据分片服务
– 基于阿里巴巴 Cobar 进行研发的开源软件
– 适合数据大量写入数据的存储需求
分片规则
• mycat 服务提供 10 种分片规则。
– 1 枚举法 sharding-by-intfile
– 2 固定分片 rule1
– 3 范围约定 auto-sharding-long
– 4 求模法 mod-long
– 5 日期列分区法 sharding-by-date
– 6 通配取模 sharding-by-pattern
– 7ASCII 码求模通配 sharding-by-prefixpattern
– 8 编程指定 sharding-by-substring
– 9 字符串拆分 hash 解析 sharding-by-stringhash
– 10 一致性 hash sharding-by-murmur
工作过程 ( 续 1)
• 当 Mycat 收到一个 SQL 时
– 会先解析这个 SQL 查找涉及到的表,然后看此表的定
– 如果有分片规则,则获取到 SQL 里分片字段的值,并
匹配分片函数,得到该 QL 对应的分片列表
– 然后将 SQL 发往这些分片去执行,最后收集和处理所
有分片返回的结果数据,并输出到客户端
以 select * from Orders where prov=? 语句为例,查到 prov=wuhan ,
按照分片函数, wuhan 返回 dn1 ,于是 SQL 就发给了 MySQL1 ,去
取 DB1 上的查询结果,并返回给用户。
如果上述 SQL 改为 elect * from Orders where prov in
(‘wuhan’,‘beijing’) ,那么, SQL 就会发给 ySQL1 与 MySQL2 去执行,
然后结果集合并后输出给用户。但通常业务中我们的 SQL 会有 Order
By 以及 Limit 翻页语法,此时就涉及到结果集在 Mycat 端的二次处
理。配置 mycat