关于数据访问层 引用维基百科 :A Data Access Layer (DAL) is a layer of a computer program which provides simplified access to data stored in persistent storage of some kind, such as an entity-relational database. This data access layer is used in turn by other program modules to access and manipulate the data within the data store without having to deal with the complexities inherent in this access.
5.
关于数据访问层 ( 续) 应用程序 Data Access Layer DB API 文件 DAL 在系统中的位置
6.
关于 Dal - 概览 Dal 是手机之家开发的数据访问层软件的产品名。 Dal1.0 、 Dal2.1.x 、 Dal2.2.x 及 Dal2.x 则是该软件的不同版本系列的一个引用。 Dal 是手机之家研发团队近几年在开发和运营上的经验的总结以及智慧的结晶。 开发 Dal 的目的是为了解决在构建大中型网站时遇到的和数据访问有关的诸多问题,如怎样使得分表透明化,怎样使得缓存存取清除自动化,怎样才能更好地防止服务单点故障等等。 Dal1.0 是一个具有里程碑意义的版本,但在很多方面仍然欠考虑。 Dal2.1.x 是一个经过精心设计、认真编写,具有较高可用性的分布式数据访问层,是综合数据代理 ( 如 MySQL Proxy) 、名值对缓存 ( 如 Memcached) 、集群等等思想而构建的一个软件系统。 Dal2.2.x 是目前的最新系列,引入了很多新特性:如分布式事务,支持数据库主从等等。
7.
关于 Dal - 软件定位 1) 不但具备了 memcached 和 mysql proxy 的优点,还避免了两者的缺点。 2) Dal 作为一个中间件,应保持语言中立、数据库中立。 3) 让系统在数据访问层上具备分布式计算能力。 4) 不造 ORM 轮子,只是发明访问数据的接口。
Dal 的产生 - 多数现有系统的经典问题 1) 由于 web server 可以直接访问 db server ,在高峰阶段,并发量比较大,导致 db server 经常 down 掉。 2) 添加缓存代码以降低数据库访问压力,但由于开发人员自己控制缓存使得: a) 缓存访问逻辑混杂在系统的各个角落,造成代码维护成本上升。 b) 开发人员根据自己的喜好来控制缓存的 KEY 和 VALUE ,造成缓存混乱。 c) 开发人员既要负责业务逻辑的编写,还要负责缓存管理,造成编程复杂度提高、开发效率低下。
14.
Dal 的产生 - 多数现有系统的经典问题 ( 续 ) 3) 在分表的情况下,程序员需要考虑和编写大量繁杂的和分表有关的代码: a) 需要根据规则计算出数据的存取目标是在哪个分表当中。 b) 如果取回的数据分布在不同的分表中,需要合并结果。 c) 由于大表切分后变成了多个小的分表,对于有排序要求的查找, 需要通过建立并查找辅助索引来解决。 d) 如果一套分表有多个辅助索引,需要寻找最优辅助索引。
15.
Dal 的产生 - Dal1.0 应需而生 HTTP MySQL Memcached 存条目 表现层 逻辑层 Dal1.0 MyCached 存 id list 及 聚合运算结果
Dal 的发展 - Dal2.1.x 大图 MySQL Dal Server JDBC Oracle ??? JDBC JDBC Java Dal Client PHP Dal Client Python Dal Client ? Dal Client DALP DALP DALP DALP 缓存组件
22.
Dal 的发展 – Dal Server2.1.x 大图 Monkey NIO Framework query executor routing strategy query parser cache provider Event listener MySQL conn provider config manager big queue dal handler Oracle DALP
Dal 的发展 – Dal2.2.x 大图 Dal 专用 客户端 Dal Server #a Cache #c Cache #a Dal Server #b Dal Server #c Dal Server #d Cache #b Cache #d Dal2.2.x 缓存集群 数据库集群 DB#a DB#d DB#d DB#b
31.
Dal 的发展 – Dal2.2.x 重要变更 1) 自动生成条目 ( 实体 ) 类,用于缓存数据库记录。数据已经有了类型,同时有望缓解 JVM GC 问题。 2) 支持分布式事务。遵循 XA 规范。 3) 支持数据库主从。 4) 缓存内置、外置,任君选择。 5) 更好的元信息抽象,更聪明的发现及重载机制。 6) 更优的内置消息队列。内存中存储的是引用。 7) 已从 Dal Server 分离出 Dal Core ,可以简单地作为嵌入式包来引用。 8) 已支持 Php, Java, Python, Ruby 四个客户端。