社交网站的ORM是否有意义?

Jos*_*ogi 2 sql language-agnostic orm web-frameworks social-networking

我之所以这样问是因为我需要知道是否在社交网站上使用ORM根本没有任何意义.

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

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

基于我有限的经验,这是我有限的理解.您在构建社交网站方面有什么经验?我的观点有效吗?在不担心使用ORM的情况下使用裸SQL是否蹩脚?ORM可以帮助建立社交网站有什么意义?

Bil*_*win 17

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

ORM对于数据库可移植性没什么价值,因为您只使用您部署的一个数据库.

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

使用ORM与不使用ORM似乎不会对可伸缩性产生巨大影响.其他可扩展性更强大的技术包括:

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

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

人们普遍认为,数据库始终是Web应用程序的瓶颈,但也有一种情况是提高前端的效率至少同样重要.参看 史蒂夫索德斯的书.


编程实体框架(2009)中的Julia Lerman ,p.503表明,直接使用DataReader和使用Microsoft的LINQ to Entities之间的查询执行成本增加了220%.

另请参阅Jeff Atwood在All Abstractions上的帖子是Failed Abstractions,他表示使用LINQ至少是使用纯SQL的成本的两倍,即使是以天真的方式.

  • *"(...)通常比自己编写普通SQL要差得多"*我真的不同意,特别是在"很多"上(和一个好的ORM实际上比大多数开发人员产生更好的SQL但是让我们说这不适用这里). (2认同)
  • @Pascal:毫无疑问,有效的ORM以及浪费的ORM存在轶事案例.我的观点仍然是ORM的主要好处在于开发效率,而不是运行时效率. (2认同)