`
男人50
  • 浏览: 229380 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

分片规则

 
阅读更多
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目前已有的分片规则,每种规则都有特定的场景,分析每种规则去选择合适的应用到项目中。
1
0
分享到:
评论

相关推荐

    mycat分片规则

    mycat分片规则,各种分片策略,很好的Mycat入门资料,适合初学者。

    mycat分片规则和算法.docx

    常用的根据主键或非主键的分片规则配置,如枚举法,固定分片hash算法,范围约定,求模法,日期列分区法,通配取模,ASCII码求模通配,编程指定,字符串拆分hash解析,一致性hash。本资源针对以上每一种算法都有详细...

    mycat分片规则 1

    mycat分片规则 1

    Mycat从入门到精通之分片规则、场景、策略.zip

    本资源为Mycat教程,内含PPT讲义及练习题。

    根据规则mysql创建分表

    接下来,我们需要设计一个分片规则,用于决定如何根据分片键将数据分布到不同的表中。一个常见的方法是使用模数(取余)操作。例如,我们可以根据用户ID除以某个数字(如100)的余数来确定数据应该存储在哪个表中。...

    详解-mycat分片

    详细介绍mycat分片的相关分片规则,包括枚举法、固定分片hash算法、范围约定算法、求模法、日期列分区法、通配取模等

    docker-mycat-mysql.zip

    - 使用一个t_test表做分片示意,分片规则使用mod-long - 使用一个t_task_test表做分片示意,分片规则使用sharding-by-murmur-orgcode - 采用mycat + mysql + docker-compose - 采用2分片(2主4从) - Mycat读写...

    mycat字符串枚举分片示例.txt

    org.opencloudb.route.function....分片规则:字符串枚举分片 枚举分片的适用场景:记录数可枚举(记录数基本固定或变化很小),比如省份、地区、商业区域(华东区、华中区、华北区、东南区、西南区等)。

    Mycat从入门到精通视频教程

    Mycat 几种分片规则的使用说明以及例子 第5课 Mycat跨分片问题 Mycat跨分片聚合处理、Mycat跨分片JOIN、Mycat分布式事务 第6课 Mycat性能测试与调优 Mycat性能参数及调优 Mycat性能测试 第7课 Mycat高可用...

    mycat从入门到跑路

    命令行工具指南 第4课 Mycat分片规则详解 Mycat 几种分片规则的使用说明以及例子 第5课 Mycat跨分片问题 Mycat跨分片聚合处理、Mycat跨分片JOIN、Mycat分布式事务 第6课 Mycat性能测试 与调优 Mycat性能参数及调优 ...

    一种并行XML数据库分片策略

    主要研究XML文档的并行数据分片策略,以便能够并行处理XML查询.为了描述XML数据分片。提 出了媒介节点的概念.一组媒介节点的集合可以将一棵XML数据树分割成一棵根树和一组子树的集合:根树将 在所有站点中复制;...

    实战集训营-带你锤碎MySQL.zip

    网盘文件永久链接 目录 01 01-1MySQL介绍及索引介绍.mp4 01-2索引原理.mp4 01-3组合索引.mp4 01-4索引分析01.mp4 ... 03mycat常用分片规则.mp4 04mycat读写分离.mp4 05-1分库分表介绍.mp4 05-2数据分片方案.mp4

    githubcsq#serverside#11-分片1

    分片的要素:- 要有N&gt;-2个mongod服务做片节点- 要有configsvr维护meta信息- 要设定好数据的分片规则,configsvr才能维护- 要启动

    RFC3016中文版

    直接将MPEG-4音频/视觉码流映射到RTP包上,它提供了RTP包头字段的使用规范和分片规则。同 时文档中还规定了MIME类型注册和会话描述协议(SDP)的使用。 目录 本备忘录的状态 1 版权声明 1 摘要 1 1. 介绍 2 1.1 MPEG-4...

    Mycat-server-1.6-RELEASE源码

    分片规则丰富,插件化开发,易于扩展。 强大的web,命令行监控。 支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。 支持密码加密 支持服务降级 支持IP白名单 支持SQL黑名单...

    浅析python中的分片与截断序列

    在分片规则里list、tuple、str(字符串)都可以称为序列,都可以按规则进行切片操作 切片操作 注意切片的下标0代表顺序的第一个元素,-1代表倒序的第一个元素;且切片不包括右边界,例如[0:3]代表元素0、1、2不包括3...

    高级数据库课后习题答案

    简要回答以下问题。 (1) 描述磁盘空间管理器的主要作用,并说明它与OS文件系统的关系。 (2) 解释关系数据库系统中关系表与文件的关系。 (3) 如果有一个大文件需要频繁执行顺序扫描,那么,为该文件选择哪种页...

    mycat分库分表示例

    1. 分片方式 2. 配置规则 二. 连续分片 1. 自定义数字范围分片 2. 按日期分片 3. 按单月小时分片 4. 按自然月分片 三. 离散分片 1. 枚举分片 2. 程序指定分区的分片 3. 十进制求模分片 4. 字符串hash解析...

Global site tag (gtag.js) - Google Analytics