Total Pageviews

Saturday 18 February 2012

PHP-Mysql的数据抽象层

PHP-Mysql 的数据抽象层 (Data/Database Abstraction Layer, 下文简称DAL)
简单说一下DAL 数据抽象层的定义。DAL的目的是做一个数据操作的封装(主要是读写),使得应用开发过程中,业务逻辑和具体的数据操作实现分离开来。
目前我已经发现有两个DAL 类库, ADOdb 和 Crystal(Crystaldb)。
1) ADOdb
ADOdb 应该是属于比较知名的一个,在debian的软件源都能搜索得到。它给自己的描述是”ADOdb Database Abstraction Library for PHP (and Python) for MySQL”。几乎支持所有的数据库以及php类库(组合起来有50多种)。但是它还是对不同的DBMS以及其对应的php extension 接口的抽象。没有做我所期望的SQL语法抽象。
source: http://adodb.sourceforge.net
2) Crystal:
Crystal 的意思是水晶;而Crystal 对数据库的操作的确封装得很漂亮。虽然现在这个项目并不是很知名(截止11年2月5日中午,加上我,github上仅仅21人关注,而我在 stackoverflow 上找到的引用链接莫名其妙地打不开…),我还是很看好她的。应该非常适合做中小型网站或者项目原型。
source: https://github.com/martinrusev/Crystal
DAL 在一些php framework 中也有对应的实现。我把我找到的一些例子列出来。
3) Zend Framework
相对于 ADOdb 而言,ZF 支持的数据库、扩展并不多,但是常用的都包括了,如mysql,mysqli,PDO,Oracle,MS SQL Server. SQL语法抽象做得很完善,支持sql的绝大部分语法,安全性也不错,其提供的接口类似于 Crystal。总而言之,ZF的DAL 很值得借鉴。
source: https://github.com/zendframework/zf2
4) cakephp
cakephp 也有一个不错的 DAL. 也是支持了几个主流的DBMS(对于mysql 而言,没有支持PDO,只有mysql/mysqli),代码不多,功能也比较完善。似乎自己做了一套数据类型校验机制。重点参考对象。
5) yii
据说是一个 high-performance 的php framework, DAL也做得挺不错。支持 MS SQL Server, mysql, oci(这是神马?), PostgreSQL, sqlite。框架主体是一华人(twitter: @qiang1)写的。也是重点参考对象。
6) MicroMVC
在DAL 之上,有ORM (Object-relational mapping) 做缓存。DAL本身做得很简单,主要是insert, select, mysql connect 几个基本操作,没有上面三个框架提供的功能全面(比如 table schema 的创建、修改,Transactions 的支持等等)。db的php-extension 仅仅支持PDO。代码可读性差。另外,php版本要求 5.3+,这要求也太高了…
source: https://github.com/Xeoncross/micromvc
时间有限,我先列举这些。有空再继续学习一些。anyway,上面已经包含了几个主流的php 框架。
最近打算完善下自己做的一个数据抽象层DAL 框架(这里的D是Data, 包括数据库和缓存),目标是高效、通用、并在DAL 中封装内存缓存(DAL中封装内存缓存,是为了降低缓存的粒度,以较低的内存消耗达到 high-performance 的目标)。观察并思考了一段时间,发现缓存不容易在DAL中做完美的封装和控制。不过目前还没有发现带缓存的DAL,所以还是有必要尝试一下。
另外,说个很狗血的事情。google 搜索’Database Abstraction Layer’ 排在第二位的,是个个人博客,标题是非常唬人的”Database Abstraction Layers Must Die!”。里面的观点很狗屎,怎么说呢,他自己概念都没弄清楚就胡乱喷,偏偏这博客SE排名挺高。看来以后还是得尝试写些英文的技术博客,老外太笨了, 都看不懂中文的。

from http://liruqi.wordpress.com/2011/02/06/php-mysql-data-abstraction-layer/

No comments:

Post a Comment