代码之家  ›  专栏  ›  技术社区  ›  Joshua Partogi

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

  •  2
  • Joshua Partogi  · 技术社区  · 16 年前

    我之所以问这个问题,是因为我需要知道使用ORM作为社交网站是否有任何意义。

    我认为ORM不适合社交网站的理由是:

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

    这是我有限的理解,基于我有限的经验。你在建立社交网站方面有什么经验?我的分数有效吗?在不用担心使用ORM的情况下使用裸SQL是否有缺陷?ORM可以在哪些方面帮助构建社交网站?

    6 回复  |  直到 7 年前
        1
  •  17
  •   Cœur Gustavo Armenta    7 年前

    使用ORM的价值在于帮助 加快发展 通过自动将查询结果分配给对象字段,并跟踪对对象字段的更改,以便将其保存到数据库,这是一项繁琐的工作。因此这个词 对象关系映射 .

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

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

    使用ORM和不使用ORM似乎对可伸缩性没有很大影响。其他可扩展性方面的优势更大的技术包括:

    • 管理RDBMS中的索引。尽可能多地改进从O(n)到O(log)的算法 二 n)。
    • 智能缓存体系结构。
    • 通过数据库分区/切分水平扩展。
    • 数据库负载平衡和复制。在可能的情况下从从属数据库读取,并写入单个主数据库。从系统和主系统的索引不同。
    • 补充RDBMS与补充技术,如斯芬克斯搜索。
    • 通过向问题扔硬件实现垂直缩放。杰夫·阿特伍德在StackOverflow播客中对此发表了评论。

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

    人们普遍认为,数据库始终是Web应用程序的瓶颈,但也有一种情况,即提高前端的效率至少同样重要。通过书籍 Steve Souders .


    Julia Lerman在 编程实体框架 (2009年),第503页显示,在直接使用DataReader和使用Microsoft的Linq to Entities之间,查询执行成本增加了220%。

    另请参见Jeff Atwood的帖子 All Abstractions are Failed Abstractions 他指出,即使以一种幼稚的方式,使用LINQ的成本至少是使用普通SQL的两倍。

        2
  •  3
  •   o.k.w    16 年前

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

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

    在我看来,ORM可以帮助你编写更干净、更清晰的代码。如果您不小心使用它,可能会导致过多的查询,但这并不是一个规则。如果我是您,我将开始使用ORM和框架的最佳实践,并且仅当您发现自己需要ORM不提供的功能时才转到SQL。

        4
  •  0
  •   Thilo    16 年前

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

        5
  •  0
  •   Tommy    16 年前

    伊姆霍。ORM是需要的。

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

      1. 更干净的代码,可以在表类文件中定义与特定表相关的所有方法,如果需要原始SQL联接查询,没问题,可以在那里定义。接着是干吻。它比您一次又一次地编写类似的原始SQL查询要好得多。
        6
  •  -1
  •   Jared    16 年前

    您的站点足够大,以至于扩展成为一个问题的几率非常小,所以为什么过早地通过使用原始SQL而不是ORM来进行优化呢?如果数据库和应用程序设计合理的话,您可以通过向数据库投掷更好的硬件来达到相当远的目的。虽然您可能需要为创建朋友图之类的事情编写原始SQL,但是当有人更改数据库时更新数据库、发送私人消息、上载照片等所有的小事情呢?使用ORM可以简化所有必须完成的简单数据库任务,同时允许您在绝对必要的情况下提交代码。