https://v.youku.com/v_show/id...

上一期我们演示了 dble 安装好以后的目录结构,下面我们就介绍第二篇基本功能。

ppt p9.png

水平拆分原理

dble 最核心的功能就是数据的水平拆分。首先说数据拆分,如果不太了解数据拆分是怎么回事,我这里先简单的介绍一下。本来我们一张表是完整的,但是这张表过大,超过一亿条数据。单表查询也好,增删改也好,都会遇到很大的问题。

ppt p10.png

图中通过一个路由算法 f,把某一个拆分字段路由到其他的库表中。通过这样一个合理算法拆分成多个表,单表中的数量就会下降,提高运行机制。然后你如果需要各种水平扩展结点,通过算法来控制就可以了。接下来看一下我们刚才那三个 XML 配置文件是如何配置。

三个 XML 配置

https://v.youku.com/v_show/id...

1、rule.xml
rule.xml 顾名思义就是一个拆分规则的配置。rule.xml 里面有两个大的子项:一个叫 table rule,一个叫 function。有多少个 table rule,就代表有多少个拆分规则;多少个 function,就具体有多少个拆分规则。我们来从具体的求模算法看,具体的配置大家可以去文档上查,我们就不过多介绍了。大体上配置的方式就是,定义名字,定义算法,定义求模基数。大家知道这样一个概念,具体 hush 算法是一个什么样的概念,因为文档上比较详细,所以这里就不多赘述。这里的 function name 一会在配置过程中会使用的,所以依赖关系是需要关心的。现在我们回到 table rule,table rule 其实就是列和拆分算法的关系。如:我们的求模算法,其实引用了刚才那个 function,还有一个 columns,columns 其实就是按 id 对 4 求模拆分。这样我们就定义好了 rule.xml,那这个算法具体怎么用呢?我们可以到 schema.xml 上去看。

2、schema.xml

schema.xml 里面大概有三个部分。第一个就是 schema 定义的库,然后库下面有表。表里面有一个叫 rule 和 datanode 的属性,下面会有 datanode 的定义。rule 定了我们 rule 的类型。dataNode 定义了有几个节点,这几个节点就是 xml 第二层 datanote 的引用。然后 datahost 1-2 对应了后面四个数据库。下面是两个数据库实例,我们建库的 datanode 是在不同的实例上部署的。这样我的表结构,拆分算法以及我真实的数据库实例就建立起来了。我们的配置分三层 schema / datanote / datahost。通过 datahost 实例下面一个实际库映射到 datanode,然后再通过刚才的拆分算法指向这些 datanode。这样的话基本的拆分算法就完成了。

3、server.xml

server.xml 首先有 system 项,是一些系统和功能参数。这里面大部分是默认不需要配置,有些比较关心的功能如何开启。然后下面一个比较重要的就是,比如IP、端口、一些基本功能,比如一些可选功能是不是需要开启,比如压缩协议功能,还有一些慢查询,全局表一致性检查,记录日志的配置,XA 事务相关的配置等,其实都放在这里。这部分文档中也介绍的比较详细。除了 systerm 配置,我们还有一个防火墙的配置,这个我们在之后会详细的介绍。接下来我们去看一下用户的配置,我们刚才看到一个管理端的用户,管理端的用户通过一个 manager 关键字来区分。还有普通用户,普通用户可以配置 schema,控制这些用户可以访问到哪些 schema,比如一个叫 testdb 的 schema,假如我在这里把其中一个删掉,那从这个用户登陆就看不见被删掉的 schema 了,这一点和 MySQL 有点像。manager 用户是不能配置 schema 的。因为安全的问题,我们用户会被加密,如果之前没有加密,我们就去把他加密一下。password 位置是一串密文,还有一些 readonly 的开关配置,控制是否只读。这就是 server.xml 了。

总结

我们来回溯一下,首先 rule.xml 定义了拆分算法。然后 schema.xml 定义了 schema 的关系,schema 里面 table,table 会使用到拆分算法,路由到 datanode,datanote 是实例下面的数据库,而 datahost 是直接映射到了实例。我们不同的数据库再回到我们 table 里面充当分片。最后 server.xml 定义了 dble 的基本参数和用户信息。强调一点,dble 项目继承自 Mycat。配置方面稍微有些不合理的地方,但是为了兼容 Mycat,并没有把用户配置从server.xml 里面拆出来。未来可能会对整个 xml 的组织结构做大的变革,使它更合理。好,我们今天先介绍到这里。

https://actiontech.github.io/...

图文稿为了方便阅读,在不影响学习的情况下优化了一些口语化词汇,文稿与视频会尽量保持一致。

DBLE 及相关项目代码地址:

https://github.com/actiontech...
https://github.com/actiontech...
https://github.com/actiontech...


爱可生开源社区
426 声望207 粉丝

成立于 2017 年,以开源高质量的运维工具、日常分享技术干货内容、持续的全国性的社区活动为社区己任;目前开源的产品有:SQL审核工具 SQLE,分布式中间件 DBLE、数据传输组件DTLE。