【问题标题】:Is it worth using ORM [closed]是否值得使用 ORM [关闭]
【发布时间】:2018-10-05 11:00:56
【问题描述】:

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

【问题讨论】:

  • 你被一些无关紧要的细节所困扰。您使用 ORM 让您的生活更轻松。如果没有帮助,请确定是否可以添加扩展程序或代码来解决此问题,或者找到没有相同问题的其他 ORM。 Node 的单线程模型在这里不是问题。它是一种非阻塞事件循环设计,只是一种并发方法,但还有很多其他方法。
  • 大多数 ORM 都有某种“绕过”模式,用于当事情变得非常激烈并且您需要编写自定义查询时。在认为它无法完成这项工作之前,请阅读您的文档以了解其全部功能。
  • 您提出问题的方式,我认为您的 ORM 经验是有限的。有些 ORM 很重,有些则比较轻。对于几乎所有人来说,答案是“这取决于你在做什么”。使用 ORM 很容易请求太多数据;你真的需要为所有项目加载那个子类吗?但是,根据我的经验,ORM 在您没有想到的方面是“沉重的”。 . .他们需要一段时间来学习。您不会只添加一个 ORM 并在一小时内起床。您必须看看 ORM 在项目的整个生命周期中会有多大用处。 . .不要为一个查询添加 ORM。

标签: mysql node.js web orm knex.js


【解决方案1】:

您应该尝试使用 ORM 和使用纯 SQL 不使用 ORM。您将看到 99% [1] 的时间里,使用 ORM 会更好。很少有项目如此简单以至于使用 ORM 没有好处。

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

我多次遇到这种对 ORM 的误解,即它们会限制您进行高效查询的能力,但并非所有 ORM 都是如此。

Node.js 很少有轻量级的 ORM,可以非常轻松地完成常见的 ORMy 任务,但它们不会强迫您将 SQL 抽象掉。您仍然可以随时掌握 SQL 甚至原始查询的全部功能,但您会比使用普通 SQL 更轻松地使用关系。

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

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

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

[1] 斯泰森-哈里森 1987

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2020-10-22
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2010-09-12
    • 2010-09-07
    • 2010-10-04
    相关资源
    最近更新 更多