原始 SQL 与 ORM 如果我已经了解 SQL

J.S*_*S.C 1 sql postgresql orm sequelize.js

我目前正在使用 PostgreSQL 和 Nodejs。到目前为止,我已经使用原始 SQL 和pg驱动程序进行了开发。我预计我的服务在不久的将来会有相当多的记录。(10k+)

我对 SQL 与 ORM 做了一些研究,因为这不是一个新问题。据我了解,

SQL具有更好的性能,ORM增强了代码可读性,减少了代码长度,比SQL更容易学习。

这项研究http://www.diva-portal.org/smash/get/diva2:1014983/FULLTEXT02显示,当行数增加时,原始 SQL 和 ORM 之间的性能差异相当大。因为研究已经进行过Laravel ORM,我知道结果可能会有所不同nodejs ORM sequelize

我的代码很长,因为我的函数中有 SQL 字符串。如果我已经知道如何编写 SQL,我应该转向 ORM 吗?

补充:如果我要实现 ORM,因为我有一些复杂的查询连接和聚合多个表,如果我使用 ORM 进行简单查询SELECTINSERT使用原始 SQL 进行复杂查询,这会是一个糟糕的选择吗?

rav*_*oli 5

我最近遇到了类似的事情,将我的经验分享给你。

我主要有数据库背景(SQL/存储过程),有一点用户界面经验。去年,我使用 Postgres 和 Django 从头开始​​编写了我的第一个 Web 应用程序,并开始自己编写整个数据库接口,因为这就是我所知道的。我以前从未使用过内置 ORM,甚至不知道它是什么或它的好处。

一开始是令人兴奋和有趣的,因为您可以控制所有数据库操作,并且还可以更好地理解所有代码的工作原理。但过了一段时间,我意识到了一些缺点:

  • 大多数 Django / Python 模块都被设计为使用 Django 的 ORM。我很难让他们中的很多人使用我的自定义界面。一个例子是他们希望有一个“id”列作为所有相关表的主键。另一个问题是不支持多列 PK。

  • 如果创建一个新对象,则需要创建多组存储过程/函数来管理它们;一段时间后就变得乏味了

  • 如果您的架构发生更改并且您想要升级已有数据的安装,您将必须创建自己的升级脚本

构建自己的界面的主要优点之一是您可以完全控制物理数据库模型(即您可以选择索引/键、自定义命名约定等)。

如果您没有提到对性能的担忧,那么我会建议只使用提供的 ORM,因为它将更轻松地与其他模块集成,并且更容易处理对新对象的支持。

这实际上取决于这些因素对您的重要性:

  • 开发时间
  • 维护
  • 表现
  • 可定制性(即自定义 SQL)
  • 与其他模块接口的能力

如果性能和可定制性是一个大问题,并且您不打算合并第 3 方模块,那么我会考虑自己编写界面。否则,我会说使用 ORM 更容易。