Performance ORM查询性能与RDBMS性能

Performance ORM查询性能与RDBMS性能,performance,laravel,orm,rdbms,Performance,Laravel,Orm,Rdbms,我正在用laravel框架开发一个应用程序,我想测量orm查询(CRUD)性能,并将其与RDBMS查询性能进行比较 我需要证明orm查询性能比RDBMS好,但我在某处读到雄辩的laravel查询性能很慢。我需要做出正确的决定,以显示预期的结果。教条比雄辩的ORM好吗?你建议我使用哪种基准。我的论文需要这些结果。你在把苹果和桔子做比较 根据定义,RDBMS总是会更快,因为RDBMS是您的数据库(RDBMS=关系数据库管理系统)。比如MySQL、SQL Server、PostgreSQL等等。数据库

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


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

你在把苹果和桔子做比较

根据定义,RDBMS总是会更快,因为RDBMS是您的数据库(RDBMS=关系数据库管理系统)。比如MySQL、SQL Server、PostgreSQL等等。数据库有一件事做得非常非常好——处理数据(好的,两件事,取决于您如何看待它——存储和检索数据)

由于从任何其他语言访问数据库的每一种方式都至少从数据库本身中删除了一步,因此,如果没有其他原因,除了语言的解释器必须首先连接到数据库至少一次,那么一切都比RDBMS本身慢,然后才能执行任何操作

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

  • 使用PHP内置的
    mysql.*
    函数进行原始查询
  • 基本数据库抽象层(ie-PDO)
  • 基本查询生成器(即Laravel的查询生成器)
  • 活动记录模式ORMs(即雄辩)
  • 无状态/事务性ORM(即条令)
假设开发人员将经过完美优化的查询输入到给定的方法中,原始查询将是最快的,其次是基本DBAL,然后是构建在基本DBAL之上的任何查询。查询构建器及其上构建的ORM的下落将取决于查询构建器本身是否构建在另一个DBAL之上(在这种情况下,我认为它比条令多删除了一层,因为Elounce构建在查询构建器上,而查询构建器构建在PDO上)。这是因为每一层都是上一层的抽象层,所以代码的路径在执行时必须穿过堆栈

然后问题就变成了我们在谈论的区别有多大?这完全取决于您输入到系统中的查询,以及系统本身的质量。你在寻找什么来显示差异?它能以多快的速度完成基本的
选择
?或者它能做多少疯狂的多-
JOIN
查询?什么决定了你论文的“速度”?只有你才能真正做出决定,因为你比这里的任何人都有更多的信息。为了全面起见,您可能正在查看基本的
SELECT
s,这些复杂查询包括
JOIN
s、
orderby
s和
groupby
s以及
INSERT
UPDATE
命令

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

那么,在实际的工业应用中,我们如何决定走哪条路线呢?编写和维护代码的速度和易用性。在这方面。由于抽象开销而损失的每一个脚本运行的几分之一秒的时间,在开发人员编写和维护相关代码所花费的时间上得到了数千倍的补偿


事实上,当你到达ORM与DBAL与原始查询相关的位置时,你就开始怀疑你的原始数据库、语言解释器或服务器是否符合你的软件需求。这实际上是Facebook几年前开始面临的问题,从那时起他们开始将一些PHP卸载到C,因为C在某些情况下更快。这也是为什么他们为PHP代码创建了一个全新的解释器(HipHop Virtual Machine,简称HHVM),它比原来的PHP引擎快了一点。

谢谢您的回答。我在laravel有一个应用程序,它使用了雄辩的ORM。现在,对于我的主题,我需要分析使用ORM的所有好处以及与RDBMS相比在性能上的缺点。你以为我为什么把苹果比作桔子?如果你能告诉我做这件事的基准吗?或者你认为最好的方法是比较mysql中的雄辩orm和oracle或其他orm关系数据库中的雄辩orm?给我一些方向指示。提前感谢您不能将Eloquent(ORM)与MySQL(RDBMS)进行比较,因为Eloquent只是访问RDBMS的另一种方式。雄辩的是苹果,MySQL是橙色。您可以将Eloquent与Doctrine进行比较,也可以将MySQL上的Eloquent(或Doctrine,或其他一些ORM)与Oracle(或其他一些数据库)上的Eloquent(/doctor/something)进行比较。尝试将Elount与MySQL进行比较就像尝试比较一个传动系和一个引擎。除了HHVM是一个PHP编译器,而不是一个解释器之外,这是一个很好的答案