18. 架构演变与发展 - DA 引入 , DAL 产生 (1) cache 处理器在缓存的存取方面有了很大的进步,但是由于接口众多,使 用起来不太方面。而且还是要编写大量的重复代码。 为此,我们重构了这部份代码,吸收了其它框架的优点,开发出 了 Data Accessor( 简称 DA) 。
19. 架构演变与发展 - DA 引入 , DAL 产生 (2) HTTP MySQL MC 表现层 逻辑层 R/W DA JMCD 存储 NS 、 Id List 、聚 合运算结果
20. 架构演变与发展 - DA 引入 , DAL 产生 (3) DA 标准化了调用接口,简化了编程,使程序员在业务逻辑层面不再关心缓 存与切库分表,极大地提高了生产力 ( 代码量继续减少,易用性提高 ) 。 但是它仍然有很多不足。 DA 直接和数据库打交道,在这一点上,可以说是 又回到了起点。 不过,从逻辑上来说, DA 已经是之后构想的 Data Access Layer 的雏形, 经过 4 个月的运行测试,现在,我们把[原 DA ]称为 DAL1.0 ,而把 [原 DA ]中包含的客户端程序仍然称为 DA 。
22. 架构演变与发展 - DAL2.0(2) HTTP MySQL DAL Server 表现层 逻辑层 SCGI DA CACHE JDBC Oracle ??? JDBC JDBC
23. DAL 设计概览 - 关于分库切表 1) 垂直切分:按功能分。分到不同的数据库或服务器。 2) 水平切分:对数据进行水平分割。 a. 最好分到同一个数据库。 b. 一种已经证明是切实可行的方案:主表+辅表。 c. 有 3 种类型:主表不打散、主表打散无辅表、主表打散有辅表。 d. 但对程序员来说, TA 看到的只是一张表,不妨称之为虚表 ( 逻辑表 ) ,这张虚表实际上可能是由 N 张实表 ( 物理表 ) 组成的。
28. DAL 设计概览 - DAL Server2.0 设计目标 1) 提升性能 : a. 连接池 b. 并行查询、合并结果 c. 更好的缓存处理 ( 过期策略可配置、缓存提供者可配置等等 ) 2) 提高可用性 : a. 多个 DAL 实例 (1 available + n candidates) b. 引入单数据库事务 3) 其它:更智能的 where 分析,表的状态监控, DAL 更具可扩展性。。。
29. DAL 设计概览 - DAL Server2.0 的可扩展设计 DAL Server2.0 总体上设计成 (core + plugins) 的形式。 core 负责一些不可插件化 ( 或难以插件化 ) 的组件, plugins 则是那些可插 化的组件。 如配置处理、查询分析,选路策略,数据处理等等就是属于 core 的内容。 而 CacheProvider, ConnectionProvider... 就是一些可插件化的例子。
30. DAL 设计概览 - DAL Server2.0 示意图 Monkey query executor routing strategy query parser cache provider result merger cache MySQL conn provider DAL Server2.0 config manager result encoder dal handler
31. DAL 设计概览 - 扩展 DAL 概念 (1) 访问数据,可以是访问数据库中的数据,也可以是 MC/JMCD 当中的数据, 那为什么不可以是 lucene 索引中的数据?