从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。面对分片集群,数据源切换,事务处理,数据聚合等,是否需要应用程序直接处理这些呢?答案肯定是否定的,这就是数据库中间件存在的原因,把这些统统都交给中间件,应用只专注于业务就行了。
那么应用程序怎么访问数据库中间件呢?和直接访问数据库有什么区别?
通常应用程序不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。对应用来说,逻辑库中读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。
分片表:
是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。
非分片表:
是对应于分片表而言的,某些表示可以不用进行切分的。
ER表:
关系型数据库是基于实体关系模型之上,通过其描述了真实世界中事物与关系,Mycat中ER表即使来源于此。根据这一思路,提出了基于ER关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据Join不会跨库操作。
表分组(Table Group)是解决跨分片数据join的一种很好的思路,也是数据切分规则的重要一条规则。
全局表:
在真实业务系统中,往往存在大量的类似字典表的表,这些表基本上很少变动,字典表具有以下几个特性:
变动不频繁。
数据量总体变化不大。
数据规模不大,很少有超过数十万条记录。
对于这类表,在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,所以Mycat中通过冗余来解决这类表的join,即所有的分片都有一份数据的拷贝,所有将字典表或者符合字典表的特性的一些表定义为全局表。数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分规划的另外一条重要规则。
###########################
分片节点(dataNode):
数据切分,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。节点主机(dataHost):
数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)。分片规则(rule):
对于大表的数据切分,切分成若干个分片表,需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。全局序列号(sequence):
数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence)。
来源:oschina
链接:https://my.oschina.net/u/3420885/blog/1942008