2

我问这个的原因是因为我需要知道不将 ORM 用于社交网站是否有任何意义。

我为什么 ORM 不适合社交网站的论点是:

  • 社交网站不是产品,因此您不需要支持多个数据库。您知道要使用什么数据库,而且您很可能不会时不时地更改它。
  • 社交网站需要用户之间的多对多关系,最终有时您需要编写简单的 SQL 来获取这些关系。ORM 的值因此再次降低。
  • 与上一点相关,ORM 有时会在后端进行多次查询以获取其记录,这有时可能效率低下,并可能导致数据库出现瓶颈。最后你必须写下简单的 SQL 查询。如果我们知道无论如何都要编写普通的 SQL,那么使用 ORM 有什么意义呢?

这是我基于我有限的经验的有限理解。您在构建社交网站方面有什么经验?我的积分有效吗?使用裸 SQL 而不用担心使用 ORM 是不是很蹩脚?ORM 可以在哪些方面帮助构建社交网站?

4

6 回答 6

17

使用 ORM 的价值在于通过自动化将查询结果分配给对象字段的繁琐工作以及跟踪对象字段的更改以便将它们保存到数据库中来帮助加快开发速度。因此,术语对象关系映射

ORM 在数据库可移植性方面对您没有什么价值,因为您只使用您部署的一个数据库。

ORM 的运行时性能方面并不比自己编写纯 SQL 好,而且通常比自己编写的 SQL 差很多。正如您所提到的,查询生成的通用方法经常犯幼稚的错误并导致冗余查询。同样,好处在于开发时间,而不是运行时效率。

使用 ORM 与不使用 ORM 似乎并没有对可伸缩性产生巨大影响。其他更具可扩展性的技术包括:

  • 在 RDBMS 中管理索引。将尽可能多的算法从 O(n) 改进到 O(log 2 n)。
  • 智能缓存架构。
  • 通过数据库分区/分片进行水平扩展。
  • 数据库负载平衡和复制。尽可能从从属数据库读取,并写入单个主数据库。以不同的方式索引从属和主控。
  • 使用 Sphinx Search 等补充技术补充 RDBMS。
  • 通过在问题上投入硬件来进行垂直缩放。Jeff Atwood 在 StackOverflow 播客上对此发表了评论。

有些人主张将您的数据管理转移到使用云计算或分布式非关系数据库的分布式架构中。在您获得大量用户之前,这可能不是必需的。一旦发展到一定程度,所有规则都会发生变化,您可能无论如何都无法使用 RDBMS。但除非你是雅虎、Facebook 或 LinkedIn 的数据架构师,否则不要担心——云计算被过度炒作了。

众所周知,数据库始终是 Web 应用程序的瓶颈,但也有一种情况是,提高前端的效率至少同样重要。参照。史蒂夫苏德斯的书。


Julia Lerman 在Programming Entity Framework (2009) 第 503 页中显示,在直接使用 DataReader 和使用 Microsoft 的 LINQ to Entities 之间,查询执行成本增加了 220%。

另请参阅 Jeff Atwood 在All Abstractions are Failed Abstractions上的帖子,其中他表明使用 LINQ 至少是使用纯 SQL 的成本的两倍,即使以一种幼稚的方式也是如此。

于 2010-01-26T03:52:34.253 回答
3

以下是我对您的观点的回应:

  • ORM不需要多个数据库才能生效,实际上ORM的大部分使用情况并不是因为能够适应不同的数据库。
  • 大多数现代 ORM 框架都足够灵活,可以获取映射类的“轻量级”变体,这实际上取决于您如何实现它们。
  • 如果确实需要,您可以在 ORM 框架内编写本机 SQL 查询。请注意,缓存和性能相关算法通常是这些框架的一部分。
于 2010-01-26T03:18:43.180 回答
1

IMO,一个 ORM 可以帮助您编写更清晰、更清晰的代码。如果你草率地使用它,你可能会导致过多的查询,但这绝不是一个规则。如果我是你,我会开始使用 ORM 和框架的最佳实践,并且只有在你发现自己需要 ORM 不提供的功能时才使用 SQL。

于 2010-01-26T03:19:17.777 回答
0

另请注意,在 Web 应用程序中,许多人正在远离 SQL 数据库。ORM 可能会帮助您迁移到非关系数据库(正是因为您的应用程序代码中没有 SQL)。看看 Google 的 App Engine 中 JDO 和 JPA 的使用。

于 2010-01-26T03:24:49.470 回答
0

恕我直言。ORM 是需要的。

  1. 它允许您以 OOP 方式访问数据库,无论是否有多个数据库。

    1. 更简洁的代码,您可以在表类文件中定义与特定表相关的所有方法,如果您需要原始 sql 连接查询,没问题,定义在那里。它遵循 DRY 和 KISS。这比你一次又一次地编写类似的原始 sql 查询要好得多。
于 2010-01-26T03:26:08.437 回答
-1

您的站点足够大以至于扩展成为问题的可能性非常小,那么为什么要过早地通过使用原始 SQL 而不是 ORM 来进行优化呢?假设数据库和应用程序设计不错,您可以通过在数据库中投入更好的硬件来取得相当大的进展。虽然您可能需要为创建朋友图之类的事情编写原始 SQL,但是当有人更改电子邮件、发送私人消息、上传照片等所有小事情(例如更新数据库)时呢?使用 ORM 可以简化您必须完成的所有简单数据库任务,同时仍然允许您在绝对必要的地方手动编写代码。

于 2010-01-26T04:02:31.210 回答