ORM seems to be a fast-growing model, with both pros and cons in their side. From Ultra-Fast ASP.NET of Richard Kiessig (http://www.amazon.com/Ultra-Fast-ASP-NET-Build-Ultra-Scalable-Server/dp/1430223839/ref=pd_bxgy_b_text_b):

"我喜欢它们,因为它们能让我以极快的速度开发小型的概念验证站点.我可以避开很多我原本需要的SQL和相关的复杂性,而专注于对象、业务逻辑和表示.但同时,我也不关心它们,因为不幸的是,它们的性能和可扩展性通常很差,即使它们与全面的缓存系统集成在一起(当您意识到正确配置时,SQL Server本身实际上只是一个 Big Data 缓存时,其原因就会变得很清楚."

我的问题是:

  • 你对理查德的 idea 有何看法?你是否同意他的观点?如果没有,请告诉我原因.

  • 最适合ORM和传统数据库查询的字段是什么?换句话说,您应该在哪里使用ORM,在哪里应该使用传统的数据库查询:),哪种类型/大小.毫无疑问,您应该 Select ORM/传统数据库查询

提前谢谢

推荐答案

我不能同意人们对ORM性能不佳的普遍抱怨.到目前为止,我已经看到许多纯SQL应用程序.虽然理论上可以编写优化的SQL,但实际上,它们会因为编写未优化的业务逻辑而毁掉所有的性能yield .

使用纯SQL时,业务逻辑与数据库模型高度耦合,数据库操作和优化取决于业务逻辑.因为没有面向对象模型,所以不能传递整个对象 struct .我见过许多应用程序,它们一次又一次地传递主键并从每个层的数据库中检索数据.我见过循环访问数据库的应用程序.诸若此类.问题是:因为业务逻辑已经很难维护,所以没有更多优化的空间.通常,当您try 重用至少部分代码时,您会接受它没有针对每种情况进行优化.性能因设计而变得很差.

ORM通常不需要业务逻辑太关心数据访问.在ORM中实现了一些优化.有缓存和批处理能力.这种自动(和运行时动态)优化并不完美,但它们将业务逻辑与其解耦.例如,如果有条件地使用一段数据,它会根据请求使用延迟加载来加载它(恰好只有一次).你不需要做任何事就能实现这一点.

另一方面,ORM有一个陡峭的学习曲线.我不会将ORM用于琐碎的应用程序,除非ORM已经被同一团队使用.

ORM的另一个缺点是(实际上不是ORM本身,而是使用关系数据库和对象模型),团队需要在关系和oo两个方面都很强大.

结论:

  • ORM对于具有足够复杂的数据 struct 的以业务逻辑为中心的应用程序是强大的,因此拥有OO模型将是有利的.
  • ORM通常有一个(不知何故)陡峭的学习曲线.对于小型应用程序,它可能会变得过于昂贵.
  • 基于简单数据 struct 的应用程序,没有太多的逻辑来管理它,很可能更容易直接地用纯sql编写.
  • 拥有高水平数据库知识但在面向对象技术方面经验不多的团队使用纯SQL很可能会更有效率.(当然,根据他们编写的应用程序的不同,建议团队转换工作重点)
  • 具有高水平的面向对象知识和只有基本数据库经验的团队很可能通过使用ORM更有效率.(这里也是一样,根据他们编写的应用程序,建议团队转换重点)

Database相关问答推荐

Power BI中的计数

Golang Gorm和Gin无法创建具有关联的对象

如何在 N1QL 查询(Couchbase 查询)中使用 LENGTH() 字符串函数

mysql数据库自动分区

H2 - 如何截断(truncate)所有表?

在 bindParam 中使用 LIKE 进行 MySQL PDO 查询

复合主键

什么是hibernate annotated类中使用的 catalog?

更新查询 PHP MySQL

如何在 MS Access 中实现 SQL INTERSECT 和 MINUS 操作

SQLite 如果列存在

MySQL workbench:如何将 mysql 数据库导出到 .sql 文件?

如果限制在本地机器上,最好使用 R 和 SQL

在内存中创建 SQLite 数据库

将用户数据存储在 LDAP 而不是 RDBMS 中的原因

App=EntityFramework 在 Sql 连接字符串中有什么作用?

如何以 SYS 身份在 Java 中连接到 Oracle?

由多个用户编辑数据库记录

查询以查找列的 nᵗʰ 最大值

不同类型的SQL之间的区别?