0.4 数据拆分简介
0.4.1 数据拆分简介
- 在dble中将表格按照数据分片的大致方式将表格的归为三个种类
- 全局表:设置为全局表的表格将会在每个mysql节点上存在一个实体,并且在每个表格实体里面存放的都是全量的数据,一般用作字典表之类的数据量小、和多表关联或者是作为数据字典的表格。
- 拆分表:设置为拆分表的表格会根据具体选择的拆分算法类型将其中的数据按照一定的规则分别存放到不同的mysql节点中去,每个节点存放一部分的数据。一般用以存放超大数据量的业务类表格,通过对于业务类表格的水平数据拆分实现性能的优化。
- 非拆分表:设置为非拆分表的表格会在指定的mysql节点上单独存在一个表格实体,在此表格中存放全量数据。一般用于存放数据压力不大的业务类表格,类似冷门功能的业务数据表。
0.4.2 规划拆分方案
- 系统开发之前,应该对业务特点进行深度分析,对数据规模进行较准确的评估,根据表的数据量、数据特点和表与表之间的关系,决定哪些表需要分片。数据节点的数量应该根据数据量和访问性能要求合理配置,过多的节点数量不仅浪费资源,而且增加运维复杂度,有时不仅不能提升性能,还会降低性能。
- 对于小表(数据量不大,如千万以下),尽量不要配置成拆分表。如果表比较独立,与其他的表基本上不进行join运算,可以作为非拆分表处理,性能不能满足要求的时候可以通过配置读写分离机制来提高性能。如果需要与拆分表进行join运算,可以配置成全局表。
- 关于每个实例的规格,选择的根据有两个因素:
- 需要存储的最大磁盘空间,需要通过拆分算法计算,根据存储数据量最大的节点来计算,并预估未来2到3年的数据增长;
- 估算一个实例需要的最大 QPS和TPS,要根据最慢的节点估算。
- QPS、TPS与实际的SQL语句、数据量、数据结构和数据节点的规格有关,根据经验来估计的话,很可能偏差较大。系统建设之前,应该配置同等或者接近的环境,进行针对性的性能测试,从而做出准确的判断。
0.4.3 数据拆分表格的配置方法
- 数据拆分配置包括节点配置和拆分规则配置。节点配置决定了数据的物理存储方式,由主机和节点组成,主机代表具体的数据库实例,节点代表实例中的数据库。拆分规则决定了数据在不同的分区上读写的规则,由拆分算法和应用拆分算法的逻辑库、表、字段组成。
- 数据写入时,系统对指定的字段值应用拆分算法得到目标节点,然后将数据写入目标节点。数据读取时,系统对查询条件应用拆分算法得到数据源节点,从源节点获取数据,在中间层进行结果合并之后返回请求方,对于不同的查询条件,源节点可能有一个或多个。