gwa2更新多数据库驱动支持

gwa2-dba-arch-201605-v2

-GWA2 在设计时,预留了对多个数据持久化的支持,其中就包括多个数据库及其驱动的支持接口,但一直没实现。一时总是瞎忙,再就是驱动不足,LAMP作为一种雷打不动的成熟解决方案,已经运行好多年,有好些成功的cases。

但最近还是老革命遇上新问题了,一个驱动之一就是 -PHP 7.0+决绝地丢掉了MySQL的相关类库,使用MySQLi这个新款的驱动类库,另外还备选了PDO作为支持。

按说这也不是难事,之前的 mysql.class 只要稍作修改就能够支持变更为对 mysqli 的支持。但如果两个并存呢? 就需要在程序里做很多判断,如果是mysql就用mysql, 如果是mysqli就用mysqli, 这样也能,而且我们能发现类似的判断在 -discuz 论坛的源码中。 但这样明显的不足是,会牺牲性能,每次执行查询都做一次多次判断,然后是不必要的耗费,需要改进。

解决办法就是两个驱动并存,那就是如前文所述,要正儿八经地实现 -GWA2 之前的设计了。一种思想思路是在 -GWA2 的数据库管理员(DBA.class)中,根据项目的配置文件所指定,加载定向的数据库驱动。其代码逻辑如下:

gwa2-dba-construct

具化到一个WebApp,其运行环境和所需后台的数据库总是明确和一定的,此时在 config.class中予以指定, 然后在 Object进行实例化时,即可加载相应的数据库驱动。每一个实现了 DBA指派功能的数据库驱动,都需要根据要求实行最基本和常用的 select (read) 和 update (write)功能。

这样就实现了该设计。根据题图,每个对象会有实例,根据对象的实例不同,可能调用文件系统、数据库系统后者API读写接口等外部联系,其中数据库接口有数据库管理员调配各种数据库驱动,以实现对不同数据库的读写。

—- —- —- —-

2016-07-04 Update.

讲清这件事不太容易,刚好在移植和实现 GWA2 Java版本的时候,有个过程Snap shot,用来说明这个设计,该是合适的,如下图,读取数据库的一个流程。

gwa2-file-layers-diagram-201607

This entry was posted in -GWA2, 编程技术, 计算机技术 and tagged , , , . Bookmark the permalink.

6 Responses to gwa2更新多数据库驱动支持

  1. wade lau says:

    最后一种图值得细读.

  2. Pingback: -GWA2 更新实现Filea和Perl版本的引入 | -UFQI-Blog

  3. Pingback: -GWA2 更新实现Filea和Perl版本的引入 | -wordpress-wadelau

  4. Pingback: -GWA2 更新缓存调用built-in cache方法 | -wordpress-wadelau

  5. Pingback: -GWA2 更新缓存调用built-in cache方法 | -UFQI-Blog

  6. Wadelau says:

    流程图,由在线制作软件, -cacoo 设计制作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注