ORM vs 传统数据库查询,它们的字段是什么?

2024-01-07

ORM 似乎是一个快速发展的模型,有利也有弊。来自 Richard Kiessig 的超快速 ASP.NET (http://www.amazon.com/Ultra-Fast-ASP-NET-Build-Ultra-Scalable-Server/dp/1430223839/ref=pd_bxgy_b_text_b https://rads.stackoverflow.com/amzn/click/com/1430223839):

“我喜欢它们,因为它们使我能够非常快速地开发小型概念验证站点。我可以避开原本需要的大部分 SQL 和相关复杂性,而专注于对象、业务逻辑和表示。但是,同时,我也不关心它们,因为不幸的是,它们的性能和可扩展性通常很差,即使它们与全面的缓存系统集成时也是如此(当您意识到当正确时,其原因就很清楚了配置好后,SQL Server本身实际上只是一个大数据缓存”

我的问题是:

  • 您对理查德的想法有何评论?你同意他的观点吗?如果没有,请说明原因。

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

提前致谢


我不同意人们普遍抱怨 ORM 性能不佳。到目前为止,我已经见过许多纯 SQL 应用程序。虽然理论上可以编写优化的 SQL,但实际上,它们通过编写未优化的业务逻辑而破坏了所有性能增益。

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

ORM 通常不需要业务逻辑过多关心数据访问。 ORM 中实现了一些优化。有缓存和批量处理的能力。这种自动(和运行时动态)优化并不完美,但它们将业务逻辑与其分离。例如,如果有条件地使用一条数据,它会根据请求使用延迟加载(仅一次)来加载它。您不需要做任何事情来实现这一点。

另一方面,ORM 的学习曲线很陡。我不会将 ORM 用于简单的应用程序,除非 ORM 已被同一团队使用。

ORM 的另一个缺点是(实际上不是 ORM 本身,而是您将使用关系数据库和对象模型这一事实),团队需要在关系和面向对象这两个领域都很强大。

结论:

  • ORM 对于以业务逻辑为中心的应用程序来说非常强大,这些应用程序的数据结构足够复杂,因此拥有 OO 模型将具有优势。
  • ORM 通常有一个(某种程度上)陡峭的学习曲线。对于小型应用程序,它可能会变得太昂贵。
  • 基于简单数据结构的应用程序,没有太多的逻辑来管理它,很可能更容易、更直接地用纯 SQL 编写。
  • 具有高水平数据库知识但在面向对象技术方面经验不多的团队很可能通过使用纯 sql 来提高效率。 (当然,根据他们编写的应用程序,可能建议团队转移焦点)
  • 具有高水平 oo 知识且仅有基本数据库经验的团队很可能通过使用 ORM 提高效率。 (这里同样,根据他们编写的应用程序,可能建议团队切换焦点)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORM vs 传统数据库查询,它们的字段是什么? 的相关文章

  • 删除 mysql 数据库中超过 3 个月的行的作业

    我们使用 mysql 服务器作为集中式日志系统 我希望有一项工作来定期删除 清理超过 3 个月的表条目 做这个的最好方式是什么 提前致谢 hinling 您是否在字段中存储项目的创建日期 If so DELETE FROM myTable
  • 使用DBFlow,如何加密已经存在的数据库?

    我正在使用 DBFlow 来处理项目中的数据库 并且我想对现有数据库进行加密 我知道我可能必须删除现有的未加密数据库并创建另一个加密数据库 我也知道我可以将 SQLCipher 与 DBFlow 一起使用 如上所述文档 https gith
  • 术语 SSTable 和 LSM Tree 之间有什么区别

    这两个术语可以互换使用吗 我读过有关 SSTable 工作原理的文章 通常文章都会开始提到 LSM Tree 然而 它们似乎是同一件事 我什么时候应该使用一个术语而不是另一个术语 对于凡人来说 SSTables 和 LSM Trees 的最
  • 有很多数据库视图可以吗?

    我很少 每月 每季度 使用 Microsoft SQL Server 2005 数据库视图生成数百份 Crystal Reports 报告 在我不读取这些视图的所有时间里 这些视图是否会浪费 CPU 周期和 RAM 因为我很少从视图中读取数
  • 如何记录数据库代码以查看数据库对象之间的依赖关系? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想为我的宠物项目编写文档 我的 PostgreSQL 数据库中有 30 个表 近 50 个视图和大约 30 个函数 存储过程 我想看
  • 在数据库中存储密码的最佳方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Hibernate saveOrUpdate 与更新与保存/持久

    我正在努力理解休眠方法之间的细微差别 saveOrUpdate update save persist 我知道网站上有一些类似的问题 Hibernate中不同的保存方式有什么区别 https stackoverflow com questi
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • theta 连接、等值连接和自然连接之间的区别

    当涉及到 theta 连接 等值连接和自然连接时 我无法理解关系代数 有人可以帮助我更好地理解它吗 如果我在 theta 连接上使用 符号 它与使用自然连接完全相同吗 A 西塔加入允许任意比较关系 例如 An equijoin是使用相等运算
  • 可以重复应用并产生相同结果的数据库操作吗?

    我现在一片空白 或者像有些人说的那样 正在经历一个高级时刻 我知道这个概念有一个正式的定义和名称 其中在数据库中运行的数据库操作 存储过程 如果重复运行将产生相同的结果 它属于数学家的自反 对称 传递等类型 您的意思是 确定性 吗 如果使用
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • ALTER TABLE 语句与 FOREIGN KEY 约束冲突

    为什么要添加外键tblDomare表导致此错误 ALTER TABLE 语句与 FOREIGN KEY 约束 FK tblDomare PersN 5F7E2DAC 冲突 冲突发生在数据库 almu0004 表 dbo tblBana 列
  • 巩固 Django 南迁移

    在我的项目的初始阶段 我对模型进行了很多更改 因此我最终为我的应用程序生成了很多向南迁移 在转到我的生产服务器执行迁移之前 是否可以以任何方式整合它们 这样我就不会为每个应用程序进行一百万次迁移 如果是这样 我该怎么做呢 您始终可以删除现有
  • MySQL JOIN 滥用?情况会变得有多糟糕?

    我读了很多关于关系数据库的文章 在每个 SELECT 上使用许多 JOIN 语句 但是 我一直想知道滥用这种方法从长远来看是否会出现任何性能问题 例如 假设我们有一个users桌子 我通常会添加 最常用 的数据 而不是进行任何额外的联接 例
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 如何使用 Wix 运行 sql 脚本创建数据库

    我在使用 Wix 创建数据库时遇到问题 我能找到的示例 参见下面的链接 都是首先使用 wix 创建数据库并运行创建表 sql 脚本 问题是我需要将 wix 设置为使用 CREATE DATABASE 运行 sql 脚本来创建数据库和表 而不
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p

随机推荐