Skip to content
He, Jiehui edited this page Sep 1, 2016 · 24 revisions

简介

Ctrip DAL是携程框架部开发的数据库访问框架,支持分库分表操作。该框架包括代码生成器和客户端。

代码生成器允许用户创建Dal团队,组织开发人员,管理数据库,创建DAO并生成代码。

客户端支持生成的代码完成用户的数据库访问操作。

通过DAL可以做到

  1. 在公司范围提供统一的数据库访问方式以降低总体的开发成本
  2. 避免由于技术人员水平不同而造成的相同功能实现方式,标准质量不一至
  3. 集中优势人员,将相关的功能做深,做好,做稳定,做全面
  4. 出现技术问题的时候有专门的技术团队及时支持。减低总体的风险

Dal定位

Dal的定位是数据库访问层。是以数据访问类(dao)的形式出现。Dal包括生成的dao代码和dal client底层api。Dal底层使用标准的数据库访问协议访问实际的数据库。

dal本身不是数据库,也不实现数据库协议。Dal依赖具体的数据库实现数据访问的工作。

Dal主要功能是ORM,sharding等。Dal支持简单的基于单库的事务,但dal不支持分布式事务

Dal也不支持数据库同步工作。数据库同步请使用数据库自带或第三方工具

典型的应用程序分为如下几层

  1. Domain Logic Layer
  2. Domain Database Access Layer
  3. DAL Client

Domain Logic Layer

用户的应用逻辑层。通过调用下层的Domain Data Access Layer完成所有跟数据库相关的操作。Domain Logic Layer相关的代码由用户维护。

Domain Database Access Layer

一般是指通过DAL code generator生成的DAO。目前支持基于单表/视图/存储过程/自由查询/手工SQL的DAO生成。

在无法满足要求的特殊情况下可以手写DAO。例如存在大量的通用操作,没必要为每个表生成单独的DAO。可以生成一个通用的DAO来满足其要求。以避免生成大量雷同的DAO类。降低维护成本和出错风险

该层code由用户的DAL team维护。用户的DAL Team负责使用Code Generator生成DAO,满足特定用户的数据库访问需求。

一般来说如果team的开发人员比较多,建议成立相对独立的DAL Team;如果人数比较少,可以明确责任人,成立虚拟的Dal Team。

DAL Client

为实现通用的数据库访问层而提供的底层API和相关的辅助类。该API为其上的Domain Database Access Layer提供支持。该层包含所有数据库操作最底层的API和针对常用操作提供的的DAO帮助类。

DAO帮助类目前包含支持单表和自由查询的DAO。同时由Code Generator生成的单表/查询相关的DAO会将相关的操作交给这些DAO帮助类去处理。这样做可以避免在Domain Database Access Layer生成大量的重复代码,并且保证质量。

DAL Client由DAL Core Team维护。DAL Core Team负责维护Code generator,DAL Helper DAO,DAL Core API等cross team的工具。

注意,DAL Core Team不同于用户自己的Dal Team。

使用情况

目前携程超过117个独立DAL团队通过Dal Code Gen管理数据库和创建DAO。 接近2000个应用在使用DAL框架,占携程所有数据库应用总数超过80%。 支持2种主流编程语言:Java和C#。 支持2种主流数据库Mysql和MS SqlServer。

开发团队

发起人

该框架最初的构想由前携程系统研发部总监陈绍明先生(Simon Chen)提出,为支持携程10X提速战略规划。陈绍明同时组建了开发团队并决定了该框架的路线图和重大设计决策。

当前开发人员

  • 赫杰辉。主要负责DAL产品的总体需求。Java客户端总体设计与开发,代码生成器Java模板
  • 王晔楠。主要负责代码生成器,C#客户端
  • 李龙娇。测试负责人,自动化测试开发

历史贡献者

  • 吴广安。最初版本的C#客户端和代码生成器的开发
  • 袁王成。Java客户端HA,Markdown,AppInternal模块和代码生成器开发
  • 夏光智。代码生成器,数据源管理
  • 万国新。C#客户端
  • 张钰。总体测试

技术支持

携程框架DAL团队