performance - ORM 查询性能与 RDBMS 性能

标签 performance laravel orm rdbms

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

我需要证明 orm 查询性能比 RDBMS 好,但是我在某处读到 eloquent laravel 的查询性能很慢。我需要做出正确的决定才能显示出想要的结果。教义比 Eloquent ORM 更好吗?还有你建议我使用哪个基准。我的论文需要这些结果。

最佳答案

你在这里比较苹果和橙子。

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

由于从任何其他语言访问数据库的每一种方式都至少从数据库本身中删除了一个步骤,所以一切都比 RDBMS 本身慢,如果没有其他原因,语言的解释器必须首先连接到数据库至少一次,在它可以做任何事情之前。

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

  • 使用 PHP 内置的原始查询 mysql_*职能。
  • 基本数据库抽象层(即 - PDO)
  • 基本查询构建器(即 - Laravel 的查询构建器)
  • Active Record 模式 ORM(即 - Eloquent)
  • 无状态/事务性 ORM(即 - Doctrine)

  • 假设开发人员将完美优化的查询提供给给定的方法,原始查询将是最快的,其次是基本 DBAL,其次是任何构建在基本 DBAL 之上的查询。查询构建器和构建在它们之上的 ORM 的位置取决于查询构建器本身是否构建在另一个 DBAL 之上(在这种情况下,我认为它使 Eloquent 比 Doctrine 少了一层,因为 Eloquent 是构建在 Query 之上的Builder,它建立在 PDO 之上)。这是因为每一个都是前一个的抽象层,所以代码的路径在执行时必须穿过堆栈。

    那么问题就变成了我们所说的差异有多大?这完全取决于您向系统提供的查询,以及系统本身的质量。你在寻找什么来显示差异?它可以多快完成基本操作 SELECT ?或者它可以做一些疯狂的多用途-JOIN询问?什么决定了你论文的“速度”?只有您才能真正决定这一点,因为您拥有的信息比这里的任何人都多。为了彻底起见,您可能正在查看基本的 SELECT s,复杂的查询,包括 JOIN 之类的内容s, ORDER BY s 和 GROUP BY s 和 INSERTUPDATE命令。

    不过,我会告诉你——任何显示速度差异的测试都可能在数千或数万笔交易中进行,至少,为了显示任何显着差异,因为在单个交易级别,我们正在讨论微秒甚至可能是纳秒的差异。

    那么,在实际的行业使用中,我们如何决定走哪条路呢?编写和维护代码的速度和易用性。在这方面,ORMs or DBALs will very often beat out raw queries .因抽象开销而损失的每个脚本运行的几分之一秒,在编写和维护相关代码所花费的开发人员成本中会产生数千倍的损失。

    事实上,当您到达 ORM 与 DBAL 与原始查询真正重要的地步时,很有可能您会开始质疑您的原始数据库、语言解释器或服务器是否符合您的软件需求。这实际上是 Facebook 几年前开始面临的问题,那时他们开始将一些 PHP 卸载到 C,因为 C 在某些情况下更快。这也是为什么他们为 PHP 代码创建了一个全新的解释器(HipHop 虚拟机,或 HHVM),它比原来的 PHP 引擎快很多。

    关于performance - ORM 查询性能与 RDBMS 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24626917/

    相关文章:

    php - 有没有办法显示数组中的哪个元素验证失败?

    php - Laravel 将数组值存储/插入到数据库 Mysql

    java - JPA 映射接口(interface)

    javascript - SAPUI5 Worklist/Demokit 应用程序解释 - 数据来自哪里?

    php - 拉维尔 5.3 : Sessions database not working as expected

    android - ORMLite 为列而不是表设置别名

    performance - 使用实例化渲染时,opengl 出现奇怪的减速

    C++ 引用与返回值

    c - 使用 USB2 连接的 ext2 卷改善小文件读取时间

    c++ - 小数组的for循环?