目录


如上图,group里面将一个表分成了许多的表,具体的落库是在atom,而这些分库分表和链接是根据规则进行的。


matrix和repo的作用上面已经解释
动态配置加载与管理:它需要配置三个数据源和一些规则,它会动态的更新服务器的状态,比如atom主服务器宕机就会告诉group进行一个主备切换,并且进行一个权重的变化。

在Matrix层具有解释器、优化器、执行器
优化器:可以进行一些简单的语法优化进行一些性能的优化
解释器:如果SQL有一些聚合函数、join、函数计算需要在上层进行执行以及join的下推,tddl都是支持的。

上图是未宕机时和MySQL建立的连接
在宕机后会切换IP地址,这里有一个巡检的任务,当主机挂掉之后,会进行主从之间的切换,切换时会把主库变为从库,从库变为主库,切换成功之后就会改配置,在group中会有它与主库的绑定信息和从库的绑定信息即group和atom之间的关系,之后会把IP地址会告诉group层会和新的IP地址进行绑定为主库,主库修改为从库配置,动态配置加载与管理会订阅这里的修改,之后会推送到动态配置加载与管理。

在进行读写分离时,主机可以进行读也可以进行写,而从机则只能进行读。
正在上传…重新上传取消
首先要选择拆分字段:
选取规则:
选取好字段之后会根据哈希函数决定要操作到哪个atom数据库
一般在扩容时需要提前配置好三层数据源,哈希函数也要改变

正在上传…重新上传取消如果查询时有不同的拆分字段,会把它们分别进行哈希去查询不同的库,最后进行数据集的合并。
思考:如果查询的不是拆分字段怎么办?
使用搜索引擎中间件,根据所给数据先查询到拆分字段在进行查询

支持自己定义本地定义规则,里面有一些默认的路由规则,来支持tddl的分库分表的插入和查询,默认规则定义在Dimond。根据规则计算进行分库分表

规则语法如上图:最前面是拆分字段,后面的1是步长,1024是枚举多少次,代码是如果有1024个分区会从第一个分区开始枚举步长为1的枚举1024次,一般默认不开启,需要配置开启
正在上传…重新上传取消
上面表达式,第一个是配置数据库,第二个是配置数据库表,第三个是允不允许没有拆分字段时是否开启全表扫描,默认不开启。上面的步长和枚举次数就是配置的这个。



主要作用是将SQL下推到MySQL去执行,从而避免tddl进行操作。

可以在不同库中让他们并行执行,提高执行效率


在单库单表MySQL服务中,都是在添加数据时使用自增ID的方式,方便b+树排序,但是如果分布式存储分库分表也这样就会造成重复的主键,所以这里使用的是tddl的sequence服务生成全局唯一主键,sequence服务可以隐式生成也可以显示生成,隐式生成就是不填主键的时候自动生成全局唯一主键,如果想使用显示服务,就要调用sequence服务的api,不会生成重复ID。

sequence是单独存在的一张表,在单机服务中根据数据库名字从value里面取一个范围到内存中,例如上图中tb2表先取1000个数到内存中,而sequence数据库value就是从0开始主键递增到1000,当1000个主键全用完之后,sequence数据库value做一个更新,再在内存中从1000开始自增1000个数来保证主键唯一。
在分库分表时,每一个分库都有sequence表,每个分库的sequence的value取值分段都不一样,一个举个例子:可以前1000个数分在分库1中,1000-2000到分库2中,这样就会解决递增主键重复问题。