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 传统数据库查询,它们的字段是什么? 的相关文章

  • 如何使用PowerShell批量调用Update-Database

    我们使用 Azure 弹性池生成多个客户端数据库和一个引用客户端数据库的主数据库 我们已经拥有多个数据库 并且正在开发新版本的代码 我们使用 EF6 代码优先 当我们更改模型 添加属性 时 我们创建迁移文件并需要调用Update Datab
  • 如何使用 Google App Engine 作为 Android 应用程序的后端数据库

    我实际上是 android 的初学者 需要很多帮助 我制作了一个带有嵌入式数据库的应用程序 现在想将其放在某个动态位置 具有简单的数据形式 一些地址和分支机构信息等 我实际上不知道如何使用放置在动态位置的动态服务器 我怎样才能做到这一点 请
  • 我将 MySQL 列设置为“NOT NULL”,但我仍然可以插入空值

    在 MySQL 中 我有一个 Column1 为 NOT NULL 的表 create table myTable Column1 int not null Column2 int not null 我仍然可以像这样插入一个空值 INSER
  • Android 内容提供商更新某些列

    我正在尝试制作一个 Android 应用程序来确定完成任务还剩多少时间 我遵循了Vogella的教程 特别是这一部分http www vogella com articles AndroidSQLite article html todo
  • 该模型已具有同名的元素 - ASP.NET

    我正在使用 ASP Net Web 应用程序 每当我尝试添加FOREIGN KEY此错误出现在数据工具操作中 SQL71508 该模型已具有同名的元素 dbo FK Sellers Users SQL71508 该模型已经有一个元素 具有相
  • PHP - 解析具有固定列宽的文本文件

    我是 PHP 和 Laravel 的新手 我需要打开文件并解析内容以将它们传递到数据库 文本文件具有固定的列宽 它没有分隔符或标题 我认为使用子字符串并将每个子字符串分配给变量将是正确的方法 但我仍在学习该语言的过程中 我不知道如何实现这一
  • 数据库设计 - 何时拆分表?

    有时创建一个单独的表会产生更多工作 我是否应该将其拆分 例如 在我的项目中 我有一张客户表 每个客户对每种产品都有自己的特殊价格 只有5种产品 未来不会计划更多产品 每个客户也有一周中公司向他交付产品的独特日子 当日期和产品价格是客户表中的
  • 数组 (UUID[ ]) 会破坏 1NF 吗?

    我的问题是包含 UUID 数组的字段是否会破坏范式 http en wikipedia org wiki Database normalization 在包含数组之前位于 NF 中的表中 原表 CREATE TABLE Floor Floo
  • 同步2个具有不同模式的数据库

    我们有一个使用通用表设计的标准化 SQL Server 2008 数据库 因此 我们没有为每个实体 例如产品 订单 订单项等 使用单独的表 而是使用通用表 实体 实例 关系 属性等 我们决定建立一个单独的非规范化数据库来快速检索数据 您能否
  • 什么时候数据库被称为嵌入式数据库?

    术语 嵌入式数据库 与 数据库 具有不同的含义吗 我见过的嵌入式数据库有两种定义 嵌入式数据库就像专门为 嵌入式 空间 移动设备等 设计的数据库系统一样 这意味着它们在紧张的环境中 内存 CPU 方面 可以合理地执行 嵌入式数据库就像不需要
  • 在哪里可以下载可用作数据仓库的示例数据库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以下载可用于创建数据仓库的示例数据库 它不应该是来自 Microsoft Northwind
  • 环回:原子读取和更新

    有没有办法在环回中实现类似的东西 LOCK READ INCREMENT UNLOCK 我想将计数器保留为数据库值 每个键都是一个计数器 或一个设置 并且它们不应该同时访问我的多个请求 此外 这也应该适用于本地请求 无 RemoteHook
  • 如何将两个django模型(表)合并为一个模型(表)

    我想合并两个 django 模型并创建单个模型 我们假设 我有第一个表表 A 其中包含一些列和数据 Table A col1 col2 col3 col4 x1 x2 x3 x4 y1 y2 y3 y4 我还有另一个表 Table B 其中
  • CloudKit 通过 cron 作业发送推送通知?

    我正在创建一个大学餐饮菜单应用程序 在其中我需要根据每日菜单发送推送通知 最初 我计划通过 Heroku 将用户数据存储在数据库中 并使用 cron 作业将数据库中的数据与每日菜单进行比较 并向用户发送适当的通知 然而 在 Cloudkit
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 如何在 PostgreSQL 中将数据库从一台服务器移动到另一台服务器?

    我正在尝试将数据库从旧服务器移动到新服务器 任何帮助 将不胜感激 Just pipe http www postgresql org docs current interactive migration html从旧服务器转储到新服务器 p
  • 什么是数据库池?

    我只是想了解数据库连接池的概念以及它是如何实现的 数据库联系池是一种用于保持数据库连接打开的方法 以便其他人可以重用它们 通常 打开数据库连接是一项昂贵的操作 尤其是在数据库位于远程的情况下 您必须打开网络会话 进行身份验证 检查授权等等
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • 如何在不运行 PostgreSQL 服务器的情况下初始化 PostgreSQL 数据库

    在初始化脚本中 我想初始化 PostgreSQL 目录 但在此阶段不需要 也不希望 正在运行的 PostgreSQL 服务器 如果我只是创建集群 作为用户postgres initdb D 但是 我还需要创建 PostgreSQL 角色 创

随机推荐