9.1 分片规则概述
在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。
前面讲了数据切分中重要的几条原则,其中有几条是数据冗余,表分组(Table Group),这都是业务上规避跨库join的很好的方式,但不是所有的业务场景都适合这样的规则,因此本章将讲述如何选择合适的切分规则。
9.2 Mycat全局表
如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大,而且大部分的业务场景都会用到,那么这种表适合于Mycat全局表,无须对数据进行切分,只要在所有的分片上保存一份数据即可,Mycat 在Join操作中,业务表与全局表进行Join聚合会优先选择相同分片内的全局表join,避免跨库Join,在进行数据插入操作时,mycat将把数据分发到全局表对应的所有分片执行,在进行数据读取时候将会随机获取一个节点读取数据。
目前Mycat没有做全局表的数据一致性检查,后续版本1.4之后可能会提供全局表一致性检查,检查每个分片的数据一致性。
全局表的配置如下
<table name="t_area" primaryKey="id" type="global" dataNode="dn1,dn2" />
9.3 ER分片表
有一类业务,例如订单(order)跟订单明细(order_detail),明细表会依赖于订单,也就是说会存在表的主从关系,这类似业务的切分可以抽象出合适的切分规则,比如根据用户ID切分,其他相关的表都依赖于用户ID,再或者根据订单ID切分,总之部分业务总会可以抽象出父子关系的表。这类表适用于ER分片表,子表的记录与所关联的父表记录存放在同一个数据分片上,避免数据Join跨库操作。
以order与order_detail例子为例,schema.xml中定义如下的分片配置,order,order_detail 根据order_id进行数据切分,保证相同order_id的数据分到同一个分片上,在进行数据插入操作时,Mycat会获取order所在的分片,然后将order_detail也插入到order所在的分片。
116
<table name="order" dataNode="dn$1-32" rule="mod-long"> <childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="order_id" /> </table>
9.4 多对多关联
有一类业务场景是 “主表A+关系表+主表B”,举例来说就是商户会员+订单+商户,对应这类业务,如何切分?
从会员的角度,如果需要查询会员购买的订单,那按照会员进行切分即可,但是如果要查询商户当天售出的订单,那又需要按照商户做切分,可是如果既要按照会员又要按照商户切分,几乎是无法实现,这类业务如何选择切分规则非常难。目前还暂时无法很好支持这种模式下的3个表之间的关联。目前总的原则是需要从业务角度来看,关系表更偏向哪个表,即“A的关系”还是“B的关系”,来决定关系表跟从那个方向存储,未来Mycat版本中将考虑将中间表进行双向复制,以实现从A-关系表 以及B-关系表的双向关联查询如下图所示:
9.4.1 主键分片vs 非主键分片
当你没人任何字段可以作为分片字段的时候,主键分片就是唯一选择,其优点是按照主键的查询最快,当采用自动增长的序列号作为主键时,还能比较均匀的将数据分片在不同的节点上。
若有某个合适的业务字段比较合适作为分片字段,则建议采用此业务字段分片,选择分片字段的条件如下:
117
尽可能的比较均匀分布数据到各个节点上;
该业务字段是最频繁的或者最重要的查询条件。
常见的除了主键之外的其他可能分片字段有“订单创建时间”、“店铺类别”或“所在省”等。当你找到某个合适的业务字段作为分片字段以后,不必纠结于“牺牲了按主键查询记录的性能”,因为在这种情况下,MyCAT提供了“主键到分片”的内存缓存机制,热点数据按照主键查询,丝毫不损失性能。 <table name="t_user" primaryKey="user_id" dataNode="dn$1-32" rule="mod-long"> <childTable name="t_user_detail" primaryKey="id" joinKey="user_id" parentKey="user_id" /> </table>
对于非主键分片的table,填写属性primaryKey,此时MyCAT会将你根据主键查询的SQL语句的第一次执行结果进行分析,确定该Table 的某个主键在什么分片上,并进行主键到分片ID的缓存。第二次或后续查询mycat会优先从缓存中查询是否有id–>node 即主键到分片的映射,如果有直接查询,通过此种方法提高了非主键分片的查询性能。
本节主要讲了如何去分片,如何选择合适分片的规则,总之尽量规避跨库Join是一条最重要的原则,下一节将介绍Mycat目前已有的分片规则,每种规则都有特定的场景,分析每种规则去选择合适的应用到项目中。
分享到:
相关推荐
mycat分片规则,各种分片策略,很好的Mycat入门资料,适合初学者。
常用的根据主键或非主键的分片规则配置,如枚举法,固定分片hash算法,范围约定,求模法,日期列分区法,通配取模,ASCII码求模通配,编程指定,字符串拆分hash解析,一致性hash。本资源针对以上每一种算法都有详细...
mycat分片规则 1
本资源为Mycat教程,内含PPT讲义及练习题。
接下来,我们需要设计一个分片规则,用于决定如何根据分片键将数据分布到不同的表中。一个常见的方法是使用模数(取余)操作。例如,我们可以根据用户ID除以某个数字(如100)的余数来确定数据应该存储在哪个表中。...
详细介绍mycat分片的相关分片规则,包括枚举法、固定分片hash算法、范围约定算法、求模法、日期列分区法、通配取模等
- 使用一个t_test表做分片示意,分片规则使用mod-long - 使用一个t_task_test表做分片示意,分片规则使用sharding-by-murmur-orgcode - 采用mycat + mysql + docker-compose - 采用2分片(2主4从) - Mycat读写...
org.opencloudb.route.function....分片规则:字符串枚举分片 枚举分片的适用场景:记录数可枚举(记录数基本固定或变化很小),比如省份、地区、商业区域(华东区、华中区、华北区、东南区、西南区等)。
Mycat 几种分片规则的使用说明以及例子 第5课 Mycat跨分片问题 Mycat跨分片聚合处理、Mycat跨分片JOIN、Mycat分布式事务 第6课 Mycat性能测试与调优 Mycat性能参数及调优 Mycat性能测试 第7课 Mycat高可用...
命令行工具指南 第4课 Mycat分片规则详解 Mycat 几种分片规则的使用说明以及例子 第5课 Mycat跨分片问题 Mycat跨分片聚合处理、Mycat跨分片JOIN、Mycat分布式事务 第6课 Mycat性能测试 与调优 Mycat性能参数及调优 ...
主要研究XML文档的并行数据分片策略,以便能够并行处理XML查询.为了描述XML数据分片。提 出了媒介节点的概念.一组媒介节点的集合可以将一棵XML数据树分割成一棵根树和一组子树的集合:根树将 在所有站点中复制;...
网盘文件永久链接 目录 01 01-1MySQL介绍及索引介绍.mp4 01-2索引原理.mp4 01-3组合索引.mp4 01-4索引分析01.mp4 ... 03mycat常用分片规则.mp4 04mycat读写分离.mp4 05-1分库分表介绍.mp4 05-2数据分片方案.mp4
分片的要素:- 要有N>-2个mongod服务做片节点- 要有configsvr维护meta信息- 要设定好数据的分片规则,configsvr才能维护- 要启动
直接将MPEG-4音频/视觉码流映射到RTP包上,它提供了RTP包头字段的使用规范和分片规则。同 时文档中还规定了MIME类型注册和会话描述协议(SDP)的使用。 目录 本备忘录的状态 1 版权声明 1 摘要 1 1. 介绍 2 1.1 MPEG-4...
分片规则丰富,插件化开发,易于扩展。 强大的web,命令行监控。 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。 支持密码加密 支持服务降级 支持IP白名单 支持SQL黑名单...
在分片规则里list、tuple、str(字符串)都可以称为序列,都可以按规则进行切片操作 切片操作 注意切片的下标0代表顺序的第一个元素,-1代表倒序的第一个元素;且切片不包括右边界,例如[0:3]代表元素0、1、2不包括3...
简要回答以下问题。 (1) 描述磁盘空间管理器的主要作用,并说明它与OS文件系统的关系。 (2) 解释关系数据库系统中关系表与文件的关系。 (3) 如果有一个大文件需要频繁执行顺序扫描,那么,为该文件选择哪种页...
1. 分片方式 2. 配置规则 二. 连续分片 1. 自定义数字范围分片 2. 按日期分片 3. 按单月小时分片 4. 按自然月分片 三. 离散分片 1. 枚举分片 2. 程序指定分区的分片 3. 十进制求模分片 4. 字符串hash解析...