1. 分库分表

1.1 分库

分库 就是将数据库中的数据分散到不同的数据库上。
垂直分库:
你将数据库中的用户表和用户订单表分别放在两个不同的数据库。
水平分库:
由于用户表数据量太大,你对用户表进行了水平切分,然后将切分后的 2 张用户表分别放在两个不同的数据库。

1.2 分表

分表 就是对单表的数据进行拆分。
垂直分表:
对数据表列的拆分,把一张列比较多的表拆分为多张表。
举个例子:我们可以将用户信息表中的一些列单独抽出来作为一个表。
水平分表:
简单来说,水平拆分是对数据表行的拆分,把一张行比较多的表拆分为多张表。
举个例子:我们可以将用户信息表拆分成多个用户信息表,这样就可以避免单一表数据量过大对性能造成影响。

2. MyCat

2.1 概念介绍

在MyCat的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。
在这里插入图片描述

2.2 MyCat分片

2.2.1 垂直拆分

在业务系统中, 涉及以下表结构 ,但是由于用户与订单每天都会产生大量的数据, 单台服务器的数据存储及处理能力是有限的, 可以对数据库表进行拆分, 原有的数据库表如下。
在这里插入图片描述
垂直拆分后:
在这里插入图片描述
以上拆分方式,如果订单关联区域表查询会报错;
对于省、市、区/县表tb_areas_provinces , tb_areas_city , tb_areas_region,是属于数据字典表,在多个业务模块中都可能会遇到,可以将其设置为全局表,利于业务操作。最终拆分方式如图:
在这里插入图片描述

2.2.2 水平拆分 - 分片规则

2.2.2.1 范围分片

根据指定的字段及其配置的范围与数据节点的对应情况, 来决定该数据属于哪一个分片。
在这里插入图片描述

2.2.2.2 取模分片

根据指定的字段值与节点数量进行求模运算,根据运算结果, 来决定该数据属于哪一个分片。
在这里插入图片描述

2.2.2.3 一致性hash分片

所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置,有效的解决了分布式数据的拓容问题。
在这里插入图片描述

2.2.2.4 枚举分片

通过在配置文件中配置可能的枚举值, 指定数据分布到不同数据节点上, 本规则适用于按照省份、性别、状态拆分数据等业务 。
在这里插入图片描述

2.2.2.5 应用指定算法

运行阶段由应用自主决定路由到那个分片 , 直接根据字符子串(必须是数字)计算分片号。
在这里插入图片描述

2.2.2.6 固定分片hash算法

该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与1111111111 进行位 & 运算,位与运算最小值为 0000000000,最大值为1111111111,转换为十进制,也就是位于0-1023之间。
在这里插入图片描述
特点:
如果是求模,连续的值,分别分配到各个不同的分片;但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。
可以均匀分配,也可以非均匀分配。
分片字段必须为数字类型。

2.2.2.7 字符串hash解析算法

截取字符串中的指定位置的子字符串, 进行hash算法, 算出分片。
在这里插入图片描述

2.2.2.8 按天分片算法

在这里插入图片描述

2.2.2.9 自然月分片

在这里插入图片描述

3. mycat 原理

3.1 插入

在这里插入图片描述

3.2 查询

在这里插入图片描述

视频来源:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=188&spm_id_from=pageDriver&vd_source=b901ef0e9ed712b24882863596eab0ca

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐