Codeigniter 数据库访问 - ORM 性能
Posted
技术标签:
【中文标题】Codeigniter 数据库访问 - ORM 性能【英文标题】:Codeigniter database access - ORMs performance 【发布时间】:2014-11-07 09:05:00 【问题描述】:我正在重构一个广泛使用数据库的 codeigniter 项目(现在该层使用 PDO 并生成查询,但它变得不可读,因此需要重构),并试图找出最好的方法。我对易于开发感兴趣,但更重要的是 - 性能,但我找不到有用的性能比较: CI 的 Active 记录、NotORM 和 ORM(目前我正在研究 GAS 和 Datamapper,但对其他建议持开放态度)可以与 CI 集成。
我开始查看 DataMapper,但后来发现一篇帖子声称它的速度是 CI Active Record 的两倍,在我看来这就像一个交易破坏者 - 我可以通过一些开销来获得额外的灵活性,代码重用性和可读性,但宁愿使用非常快的糟糕代码,也不愿发现我为此大大减慢了页面加载时间。
我正在寻找类似 @987654321@ 的东西,但适用于 ORM 和其他数据库访问层,而不是 php 框架。
【问题讨论】:
CI 的“Active Record”不是 ORM,将在 CI3 中重命名为“Query Builder”。 【参考方案1】:其实这里没有好的答案。
如果您需要极好的性能,请使用 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
【讨论】:
以上是关于Codeigniter 数据库访问 - ORM 性能的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 的模型部分是不是被视为 ORM 层?
哪个是 codeigniter 的最佳 PHP ORM? [关闭]
是否有一个带有/ORM(Laravel、Cake、Codeigniter)的 PHP 框架,我们可以在其中覆盖数据交互以从 rest api 中获取数据?