Codeigniter数据库访问-ORM性能


Codeigniter database access - ORMs performance

我正在重新分解一个广泛使用数据库的代码点火器项目(现在该层使用PDO并生成查询,但它变得不可读,因此需要重新分解),并试图找出最佳方法。我对开发的易用性感兴趣,但更重要的是性能,但我找不到有用的性能比较:CI的活动记录、NotORM和ORM(目前我正在研究GAS和Datamapper,但对其他建议持开放态度)可以与CI集成。

我开始查看DataMapper,但后来发现一篇帖子声称它的速度是CI Active Record的两倍,这在我看来就像是一个交易破坏者——我可以为额外的灵活性、代码重用和可读性增加一些开销,但我宁愿使用非常快的坏代码,也不愿发现我为此显著降低了页面加载时间。

我在找这样的东西http://www.techempower.com/benchmarks/,但适用于ORM和其他数据库访问层,而不是PHP框架。

实际上这里没有好的答案。

如果您需要非常好的性能,请使用PDO。您编写的是纯SQL查询,因此您拥有100%的控制权。

如果你想介绍一些工具来简化你写SQL的方式,也许你可以看看任何一个SQL fluent api库,它可以"稍微"抽象你:

select('X')->from('Y')->where('Z')->limit(10);

更清楚一点,也许:)。它可能还会生成与许多RDBMS(MySQL、Oracle、PostgreSQL…)兼容的查询

上述备选方案都不是ORM。如果你需要它,当然会对表现进行惩罚(我们可以说它总是"大"的)。好的现代ORM通常还允许缓存结果,甚至是生成的SQL,以避免部分开销。

不管怎样,性能当然会下降。对于每个查询,ORM都必须将结果集转换为对象(以及所有关系),这(另一方面)非常酷:D。你会失去对ORM内部工作的控制(有时,如果你不了解ORM)。

这里没有好的答案,这取决于您的用例。

如果您决定使用ORM,请查看Doctrine2。您可以在这里了解如何将其与CodeIgniter集成:http://doctrine-orm.readthedocs.org/en/latest/cookbook/integrating-with-codeigniter.html