死磕字符集使用篇之第一篇

  

基本概念

  

直接介绍概念太枯燥了,还是拿个和背景篇相似的例子介绍
业务场景:客户完成下单,快递员接受并更新运单状态,客户可以随时查看运单状态的任务。一票快递可能有多个子母件。同时,我们需要标记每个运单的状态,运单状态的解释和含义保存在运单状态字典表中。
因此,我们需要建立如下表:

  

死磕字符集使用篇之第一篇

  

我们现在按照业务将数据库垂直拆分成运单库(单表2000 tps, 6000 w数据),快递员库(单表1500 tps, 100 w数据),客户库(单表1500 tps, 1000 w数据记录);假设每个MySQL数据库单表不能超过2000 w数据,单表不能超过1000 tps。那么运单库则需要分成3片,客户库需要分成2片,统一由字符集管理。如下图所示:

  

死磕字符集使用篇之第一篇

  

1。逻辑库

  

字符集作为一个中间件,对应用应为无感知的。
应用访问字符集,根据之前所述,应用感知到后台只是一个(或者多个,和访问MySQL实例一样)数据库(假设只有一个数据库,这个库叫科幻,里面有运单相关表,快递员相关表和客户相关表);这里字符集的数据库就是逻辑库。访问字符集,结果应该如下面所示

  

死磕字符集使用篇之第一篇

  

虽然其中的表可能存在于不同的库,但是表面上,他们属于同一个字符集实例中的同一个逻辑库,所以,虽然上面的架构图显示他们不在同一个数据库,但是在字符集中,他们在同一个逻辑库。
2。逻辑表

  

在逻辑库下的表就是逻辑表。逻辑表可以分片,也可以不分片。
订单表明显是要分片的表,但是在字符集看来,他们虽然分布在不同的分片节点上(分布在不同的MySQL数据库上),但仍视为是同一个逻辑表,在同一个逻辑库里。
2.1分片表

  

分片表,是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。分片表都有自己的分片规则,根据分片规则确定分片。
配置里面,如下配置:

  
 <代码> & lt;表名="订单" primaryKey=" id " dataNode=安馐? - 2美元”规则=癿od-long”比;
  & lt;/table>  
  

意思就是用mod-long规则根据主键id将运单表订单分割到test1, test2这两个数据库(分片节点)上。
请求情况1:

  
 <代码> select *从订单id=1;  
  

对于分片表的查询,如果按照分片列查询,则请求只会被发送到一个分片上。
请求情况2:

  
 <代码> select *从订单id & lt;100和id比;0; 
  

对于分片表的查询,如果按照分片列范围(在字段类型支持范围的情况下)查询,则请求会根据分片规则计算两个边界值,然后将请求发送到对应结果的分片上,并合并每个分片的结果。
请求情况3:

  
 <代码> select *从订单initialpoint=本? 
  

像这种根据非分片列查询的情况,请求会被发送到所有分片上,并合并每个分片的结果。
请求情况4:
请求为更新类型的sql语句,与查询的三种情况相同处理。
2.2非分片表

  

一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。
例如:

  
 <代码> & lt;表名="信使" primaryKey=" id " dataNode=皌est3”比;
  & lt;/table>  
  

意思就是快递员表不用分片,保存在test3这个分片节点上。
对于非分片表的操作和对普通数据库的一样,因为不涉及到分布式数据库。
2.3 ER表

  

关系型数据库是基于实体关系模型(实体关系模型)之上,通过其描述了真实世界中事物与关系,字符集中ER的表即是来源于此。根据这一思路,提出了基于e - r关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(表集团)保证数据加入不会跨库操作。
表分组(表集团)是解决跨分片数据加入的一种很好的思路,也是数据切分规划的重要一条规则。
如下:

  
 <代码> & lt; !——运单表,对主键id对2取模——比;
  & lt;表名="订单" primaryKey=" id " dataNode=安馐? - 2美元”规则=癿od-long”比;
  & lt; !——运单子母件表,运单表的子表,order_id与订单的id列对应——比;
  & lt; childTable name=" orders_cargo " joinKey=皁rder_id parentKey=" id "比;
  & lt;/childTable>
  & lt;/table> 

死磕字符集使用篇之第一篇