Posts Tagged ‘ORM’

PHP 的 ORM 持久层框架解决方案

星期一, 07月 26th, 2010

    1、Propel
    Propel是一个适用于PHP5的OR映射(Object Relational Mapping)框架,它基于Apache Torque提供对象持久层支持。它通过XML格式的模式定义文件和相应的配置文件来生成SQL和类,它允许你使用对象代替SQL来读写数据库表中的记录。Propel提供一个生成器来为你的数据模型创建SQL定义文件和PHP类。开发者也可以十分简单的定制生成的类,还可以通过XML, PHP类和Phing构建工具把Propel集成到已有的应用开发框架中去。例如PHP框架symfony的1.2以前的版本就是使用了精简版的Propel作为默认ORM框架。
    官方网站:http://www.propelorm.org/

    2、Doctrine
    Doctrine是一个PHP的ORM框架,它必须运行在php5.2.3以后版本,它是一个功能强大的数据抽象层。它的一个主要特征就是使用面向对象的方式来实现数据库查询的封装,它底层通过一个类似 Hibernate HQL的DQL的查询语句进行数据库查询, 这使得开发的灵活性更强,大大减小了重复代码。相比Propel,Doctrine的优点在于它支持全文检索,Doctrine的文档一直就比Propel要全面丰富,社区更活跃,而且使用起来更自然、易阅读、更接近原生SQL。性能方面也略微优于Propel。同样你也可以可以很方便的把 Doctrine集成到现有的应用框架中去,比如PHP框架symfony的1.3以后的版本将Doctrine作为默认的ORM框架,同时也可以将Doctrine和Codeigniter整合起来。
    官方网站: http://www.doctrine-project.org/

    3、EZPDO
    EZPDO是一个十分轻量级的PHP ORM框架。EZPDO的作者的本意旨在降低复杂的ORM学习曲线,尽可能在ORM的运行效率和功能之间做一个平衡,它是我至今用过的最简单的ORM框架,我目前还想将它集成到我的Light Framework SDK中来,而且运行效率相当不错,功能也基本能满足需求,只不过ESPDO的更新比较缓慢。
    官方网站: http://www.ezpdo.net/blog/?p=2

    4、RedBean
    RedBean是一个易于使用,轻量级PHP ORM框架,提供对 MySQL、SQLite 和PostgreSQL的支持。RedBean架构非常灵活,核心也非常简约,开发者可以很方便的通过插件来扩展功能。
    官方网站:http://www.redbeanphp.com/

    5、其他
    国内的fleaphp开发框架基于TableDataGateway实现ORM;Zend Framework除了提供对SQL 语句的封装以外,也同样实现了TableGateway、TableRowSet、TableRow的实现;还有一些类似Rails的ActiveRecord实现的解决方案。更多ORM框架请阅:http://www.oschina.net/project/tag/126

    总结:

    总的来说,一般ORM框架对付简单的应用系统来说都能满足需求,可以大大降低开发难度,提高开发效率。但是它在SQL优化方面,肯定是比纯SQL语言要差很多,对复杂关联、SQL内嵌表达式的处理都不是很理想。也许这主要是由于PHP本身对象持久化的问题,导致ORM效率过低,普遍比纯SQL要慢10~50倍。但是,这些都是有办法解决的,最基本的解决性能的方案,可以通过缓存来提高效率。比如,Hibernate虽然配置比较繁杂,但是它通过灵活的使用二级缓存和查询缓存,来极大地缓解数据库的查询压力,提升了系统的性能。Python的SQLAlchemy以及Django中的Models模型感觉上也都还不错,笔者认为Django 的Models 模型ORM 效率也还可以,至少比PHP要快。