Skip to content

中文文档

Allen edited this page Jul 10, 2017 · 2 revisions

DDAL是一个用于处理分布式数据库路由的组件,包括的模块有:

ddal-ddr:DDAL的核心模块,提供了读写分离的可配置的数据源管理(同时内置数据源监控,默认的可以通过jconsole动态调整负载均衡)、提供了用于分表路由的formate表达式和用于枚举的range表达式(设计这个两类表达式主要是为了精简配置)、提供了灵活的数据库路由配置方案;

ddal-jsqlparser:sql路由解析模块,支持sql解析缓存所以不用担心sql解析性能问题;

ddal-squence:分布式主键服务,内置id区间缓存(使用生产者消费者队列模型)可以很大程度解决性能问题。(在单机macpro13-CPU2.7GH,内存DDR3:8G,在循环CRUD下5线程并发,单线程10000次CRUD,mysql5.7,配置SingleSequence为100*5缓存时,获取id延迟可以在1ms内)

ddal-spring:基于spring提供注解路由;

DDAL设计的核心思路是在同一个事务内,只能操作一个数据库实例,但可以操作同一个数据库实例下的多个schame对象。如果需要在一次请求中同时操作多个数据库实例,则需要未每个数据库实例都单独新开一个事务用于执行。

这样的设计是基于以下情况来考虑的:

1.一般情况下一次请求的都是访问该业务下的一个数据库实例

2.可以在分布式场景下牺牲最小的成本(限制跨数据源事务)来最大化的保留数据事务的特性(ACID)以及sql语法特性(不因为分表而改变sql的原始特性) 3.轻客户端:DDAL的执行过程可以简单概括为从sql语句中搜集需要路由的schema,根据路由规则转换schema,根据搜集到的schame集合找到相关的数据源,最后将转换后的sql交由该数据源执行。

待续。。。

Clone this wiki locally