声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载。 随着企业规模扩张和业务量的急剧增加,作为系统核心的数据库相关开发也会经历一个由单一团队发展为多团队;由单机扩张到集群;由单数据库发展为多数据库;由采用单一数据库产品到多种数据库产品并存的过程。伴随这一过程的是如何管理数据库扩展,如何规范数据库访问,如何保护数据库投资,如何应对访问量增加,如何预防安全问题等一系列挑战。 为了应对这些挑战,携程前CTO叶亚明先生(现首席科学家)发起了携程10X提速战略规划。作为支持10X规划的一部分,携程开发了具有自己特色的数据库访问框架CtripDAL。CtripDAL框架的最初构想是由前携程系统研发部总监陈绍明先生(SimonChn)提出,陈绍明同时组建了开发团队并决定了该框架的路线图和重大设计决策。 简介CtripDAL支持流行的分库分表操作,支持Java和C#,支持MySQL和MSSQLSrvr。使用该框架可以在有效保护企业已有数据库投资的同时,迅速可靠地为企业提供数据库访问层的横向扩展能力。整个框架包括代码生成器和客户端。工作模式是使用代码生成器在线生成代码,通过DAL客户端完成数据库操作。生成器具有丰富的向导指引,操作简单清晰,既可以批量生成标准DAO,也可以在方法级别定制数据库访问。客户端则可以简单地通过标准的mavn方式添加依赖。 CtripDAL与一般数据库框架最大的不同是从企业跨部门的角度,统一管理数据库相关资源。通过部署代码生成器,企业可以做到有效管理全公司的DAL开发团队,明确数据库归属和定制数据库访问。通过代码生成器生成的标准DAO代码与客户端配合使用,可以大幅提高工作效率,保证代码质量。解决了业内常见的伴随业务成长而带来的系统维护困难、开发效率低下、代码风格五花八门、代码质量参差不齐等痛点问题。 顶层设计CtripDAL整体上采用分层的设计思路。用户通过codgn生成的DAO为顶层调用代码;顶层代码调用公共DAO类来完成通用操作。 以Java为例,以下两个类为公共DAO: DalTablDao主要为标准DAO和构建SQL的DAO服务。主要满足针对单表的操作 DalQuryDao主要为自定义SQL的DAO服务。可以满足复杂SQL或多表联合SQL DalTablDao和DalQuryDao会把所有数据库操作请求打包为DalRqust并调用DalRqustExcutor来完成工作。 DalRqustExcutor会把任务分配给各种DaoTask,而DaoTask会调用DAL底层的DalClint来完成工作。 DalRqustExcutor是DAL的系统核心,抽象了所有数据库操作通用的部分。屏蔽了不同之处,可以看作是一个微内核。 根据请求的特性分为不同类型的DalRqust。DalRqustExcutor会依据传入DalRqust完成通用的判断shard、同步/异步执行、数据分割合并的工作。 处理流程: 配置与扩展为了适应不同公司的实际情况,DAL定义了丰富的扩展接口,覆盖了从数据源管理、数据库映射、连接串读取到自定义访问方式等各方面功能。同时为了方便系统监控还内置了系统状态、日志和统计模块。 以DALJava客户端为例,DAL可以定制的组件为: DalShardingStratgy,定制数据库分片策略; DalLoggr,记录DAL运行时相关信息; DalTaskFactory,细化CUD操作对应的逻辑; DalConnctionLocator,按照实际数据库标识获得连接。 DAL已经提供了每个组件的缺省实现,如果没有特殊需求,codgn缺省生成的配置可以直接使用。无需更改。如需定制,请参考缺省实现。 更多信息请参考: Java客户端配置与扩展:白癜风治好会复发吗儿童白癜风能治疗好吗
|