是否值得使用 ORM

Kho*_*liy 1 mysql orm node.js web knex.js

我正在使用 knex,该项目的查询构建器,但是在使用联接时遇到了问题,您必须手动匹配相关数据或执行单独的查询并绑定相关数据,所以我正在考虑使用 ORM,但在某个地方我听说它们速度较慢并且在后台使用循环进行查询,我使用nodejs,因此它可以阻塞线程,那么您自己是否值得使用ORM或更好的伴侣连接数据?

Mik*_*stö 6

您应该尝试使用 ORM 以及在不使用 ORM 的情况下使用纯 SQL。您会发现 99% [1] 的情况下,使用 ORM 效果会更好。很少有项目如此简单以至于使用 ORM 没有什么好处。

\n\n

您听到的人是错误的,或者他们使用了糟糕的 ORM,或者他们没有正确使用他们选择的 ORM。好的 ORM 对其数据方法进行了很好的调整,使用图形算法来找出用于获取请求数据的最佳查询数量及其与尽可能少的查询的关系。它不会阻止事件循环,除非您自己在查询生命周期挂钩中完成了一些缓慢的阻塞代码。

\n\n

我\xe2\x80\x99多次遇到过这种对 ORM 的误解,认为它们会限制你进行高效查询的能力,但并非所有 ORM 都是如此。

\n\n

Node.js 几乎没有轻量级 ORM,可以非常轻松地执行常见的 ORMy 任务,但它们不会强迫您抽象 SQL。当您需要时,您仍然可以拥有 SQL 的全部功能,甚至可以随时掌握原始查询,但是您\xe2\x80\x99 将比使用普通 SQL 更容易地处理关系。

\n\n

例如,您可以高效地读取/写入嵌套 JSON 结构,并使用单行轻松填充多个表并从数据库读取嵌套数据,而无需找出优化所需查询数量的图形算法来获取相关数据并构造嵌套数据来自平面查询结果。

\n\n

最后,如果您不使用任何 ORM 和一组自定义帮助程序,其他人将更难进入该代码库,因为它将充满自定义纯 SQL + 各种帮助程序。

\n\n

免责声明:我有偏见(并且知道我\xe2\x80\x99m在说什么),因为我\xe2\x80\x99在过去几年中一直在维护knex查询构建器,并且我\xe2\x80\x99m参与了开发我可以推荐的唯一轻量级 Node.js ORM:objection.js

\n\n

[1] 斯泰森-哈里森 1987

\n