架构师学习第15周——读写分离、分库分表
MyCat和Sharding Jdbc
对MyCat的初步理解
在我的理解来就是一个用于管理多个数据库之间的关系的第三方组件,抽象起来的话,可以看成一个mysql数据库(当然也可以是其他的,只不过是我mysql用的比较多),能够根据一定的算法把数据分发到各个数据库中,减轻数据库的压力。当我们配置好对应的参数之后,我们对多个数据库的操作就是相当于是对一个数据库在操作,而我们对应是将sql语句给到MyCat中的一个逻辑表,这个逻辑表并不是真实存在的,而是一个能够连接分散到各个数据库中的数据的一个逻辑层面存在的表,,让我们对多个数据库的操作仿佛是在对一个表在操作。
更加官方的理解:
垂直切分,水平切分
垂直切分:以表为单位进行切分.
水平切分:以数据为单位进行切分,同一张表中的数据(常用)
分片规则
参考博客:https://blog.csdn.net/u011731544/article/details/80579088
Mysql全局表和子表
全局表:在每个数据库中都存在表,一般是一些字典表,通常用于解决需要跨库join的需求,因为跨库需要考虑性能损耗。
子表:插入数据时可以根据子表指定的指定的列和父表指定的列,判断是指是否相同相同的话就插入父表同于一个数据库的子表,比如说我们查询订单时通常需要连带着查看订单中的商品信息,这是我们的订单商品表就是父表,订单表就是子表。也是解决我们的跨库join问题。
读写分离
读写分离顾名思义,就是读和写的操作分散在不同的数据库中,当我们有多个写表和多个读表时我们可以根据一定的算法进行负载均衡。当然我们的Mycat知识负责读写分离的配置,数据同步的操作还需要再mysql上进行配置。
具体操作如下:
|
关于MyCat的各种配置
参考博客:https://blog.csdn.net/yu342107056/article/details/88326540
Sharding Jdbc的初步理解
简单来讲他是一个给我们开发人员提供的jar包,我们只需要在pom文件中进行导入即可使用,而且与MyCat的配置思想是相同的,只是配置形式不同。他的作用与MyCat很相像,只是在使用的方面会有区别,他里面涉及到的各个概念都与MyCat大致相同,但最特别的是Sharding Jdbc支持在同一个数据库中进行分片。
Sharding Jdbc详细的配置可以参照官网
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/usage/sharding/spring-boot-starter/
初步了解两者后的具体区别
对于MyCat使用难度会比使用Sharding Jdbc要麻烦一点,MyCat一般需要在Linux服务器上配置conf文件,
而Sharding Jdbc只需要在IDEA中中的配置文件进行配置就好,而且两者最大的区别就是Sharding Jdbc支持同一个数据中进行分片,但MyCat不支持。但我认为使用MyCat在整体的架构思路的可拓展性以及维护性会更清晰,比如说我们使用使用keepalived和Ha-proxy对MyCat实现高可用和负载均衡。但日常使用的话我认为,Sharding Jdbc会对开发人员更友好一点。
其他的相关资料: