Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

Mycat数据库中间件技术最佳实践手册-中台 PDF 下载


分享到:
时间:2020-10-14 09:59来源:http://www.java1234.com 作者:转载  侵权举报
Mycat数据库中间件技术最佳实践手册-中台 PDF 下载
失效链接处理
Mycat数据库中间件技术最佳实践手册-中台 PDF 下载


本站整理下载:
提取码:q0no 
 
 
相关截图:
 
主要内容:


1.1. 垂直切分
垂直切分就是将系统中的所有的表按照模块或者业务功能对表进行分类,然后将
表划分到不同的数据库中,这样使得数据或者压力分部到各个分库中。数据库的垂直
切分要求的是各个功能模块之间的耦合度越小越好,各个模块之间的耦合越低,那么
拆分起来越容易,后期也更方便去拓展和管理。如下示意图所示:
将整个系统的表按照功能进行切分,切分成用户模块、订单模块以及交易模块。
但是往往用户模块中的一张表A和订单模块中的一张表B需要做关联Join查询时,此时
便是跨库Join,垂直切分是不支持的,只能通过接口的方式来解决,从而导致系统的复
杂度提升。随之再进一步演化出来的便是,因为使用了垂直切分而必须进行的服务化
改造,简言之,就是把之前强耦合的系统拆分成多个若耦合的服务,通过服务之间的
调用来满足已有系统的需求。
优点:
(1) 拆分后业务清晰,拆分规则明确;
(2) 减少了表与表之间的IO竞争;
缺点:
(1) 不能解决单表中数据库量多大的压力;
(2) 当业务耦合度高时,不能很好地进行表的分类与拆分;
1.2. 水平切分
如果说垂直切分是按照表的分类来进行表的切分,那么水平切分是按照表中的行
记录来进行的切分,将表中的行记录按照特定的规则,拆分到某些特定的数据库,实
现同一个表的数据分散存储。如下示意图所示:
 水平切分
应用服务
逻辑库
物理库-1 物理库-2 物理库-3
user表
order表
pay表
user表
order表
pay表
user表
order表
pay表
按照某种规则,将user用户表、order订单表以及pay交易表进行了切分,切分到
三个不同的物理库中,每个物理库都有这三张表的数据行记录。而逻辑库中提供了对
这些表的映射,这些切分配置对应用层而言完全是透明的,直接操作逻辑库即可。
在举个例子,通过Mycat作为中间件我们可以将数据通过ID%3的方式将订单数据
切分到三个数据库Mysql节点,如下图所示:
在进行水平拆分时,最为重要的是找到一种符合业务的表拆分规则,这种规则的
制定是综合考虑到各种业务以及技术因素的。比如在上面的例子中,我们如果对order
订单表进行水平拆分的话,可以对Id进行取模,根据取模的结果,拆分到不同的物理数
据节点,实现分片。
优点:
(1) 不存在单库大数据、高并发下的性能瓶颈;
(2) 对应用透明,应用端改造较少;
(3) 如果按照合理的拆分规则,那么Join操作基本上是可以避免跨库的;
缺点:
(1) 拆分规则难以抽象,需要考虑很多业务和技术因素; (2) 分布式事务属于弱XA事务,存在小概率(极小的)的数据不一致的情
况;
(3) 跨库Join的性能差,所以设计上要尽量避免跨库;

 
 
------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐