首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORM查询性能与RDBMS性能

ORM查询性能与RDBMS性能
EN

Stack Overflow用户
提问于 2014-07-08 08:20:02
回答 1查看 4.6K关注 0票数 3

我正在用laravel框架开发一个应用程序,我想测量orm查询(CRUD)的性能,并将它与RDBMS查询性能进行比较。

我需要证明orm查询性能比RDBMS更好,但在我读到的某个地方,雄辩的laravel查询性能很慢。我需要做出正确的决定,才能显示出预期的结果。教条比雄辩的ORM好吗?还有你建议我用哪种基准。我需要这些结果作为我的论文。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-08 21:34:22

你在拿苹果和橘子做比较。

根据定义,RDBMS总是更快,因为RDBMS是您的数据库(RDBMS =)。IE -- MySQL,Server,PostgreSQL等--数据库做了一件非常非常好的事情--处理数据(好的,两件事,取决于你如何看待它--存储和检索数据)。

由于从任何其他语言访问数据库的每一种方法都至少要从数据库本身移出一步,所以所有事情都比RDBMS本身慢,如果除了语言的解释器之外,它必须首先连接数据库至少一次,然后才能做任何事情,那么一切都比RDBMS本身慢。

也就是说,在PHP中处理数据库时有几个不同的层可用:

  • 使用PHP内置的mysql_*函数进行原始查询。
  • 基本数据库抽象层(ie )
  • 基本查询生成器(即-Laravel的查询生成器)
  • 活动记录模式(如-雄辩)
  • 无状态/事务性程序(ie )

假设开发人员向给定方法提供了完美的优化查询,原始查询将是最快的,其次是基本DBAL,其次是构建在基本DBAL之上的任何查询。查询生成器及其上构建的ORM将取决于查询生成器本身是否构建在另一个DBAL之上(在本例中,我认为它比Doctrine多删除了一层,因为雄辩是构建在基于PDO的查询生成器上的)。这是因为每个抽象层都是前面的抽象层,所以代码的路径在执行时必须在堆栈中运行。

那么问题就变成了我们谈的有多大的不同?这完全取决于您要输入到系统的查询,以及系统本身的质量。你在找什么来表现出不同之处?它能以多快的速度完成基本的SELECT?或者它能完成一些疯狂的多JOIN查询?是什么决定了你论文的“速度”?只有你才能真正决定,因为你比这里的任何人都有更多的信息。为了彻底起见,您可能会查看基本的SELECT,包括JOINs、ORDER BYs、GROUP BYs、INSERTUPDATE命令之类的复杂查询。

不过,我要告诉你们的是--任何显示速度差异的测试都有可能发生在数千到数万个事务上,至少为了显示任何显著的差异,因为在单个事务级别上,我们谈论的是微秒,甚至可能是纳秒的差异。

在实际的工业使用中,我们如何决定走哪条路呢?编写和维护代码的速度和易用性。在这方面,ORM或DBAL通常会击败原始查询。。在编写和维护代码所花费的开发人员成本中,每个脚本运行的秒数被抽象开销损失了数千倍。

事实上,当您到达ORM与DBAL与原始查询的关系时,您就会开始怀疑您的原始数据库、语言解释器或服务器是否能够满足您的软件需求。这实际上是Facebook几年前开始面临的问题,那时他们开始将一些PHP卸载到C上,因为在某些情况下C更快。这也是为什么他们为PHP代码创建了一个全新的解释器(HipHop虚拟机,HHVM),它比最初的PHP快得多。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24626917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档