写点什么

争论:OODBMS 有时要比 ORM 方案略胜一筹?

  • 2007-06-19
  • 本文字数:2340 字

    阅读完需:约 8 分钟

在 ODBMS.org 站点一篇刚发布的文章中,作者 Ted Neward 详细阐述了自己关于对象关系映射(Object/Relational Mapping,ORM)的看法,Ted 认为如果不分场合地滥用 ORM,就如同计算机领域的越南战争一样,会给项目带来不良的影响。Ted 在文中阐述的主要观点是,面向对象数据库管理系统(Object-oriented Database Management Systems,OODBMS)在某些应用场合,将比关系型数据库管理系统(Relational Database Management Systems,RDBMS)有更多的优势,比如说:

“在相互不匹配的应用中,就像以前那些建立在大型数据库基础之上的小型 Web 应用一样,使用单一的用户接口来访问单一数据库,或是使用技术先进的网络服务来实现。然而,如果所有的交互操作通过用户接口或服务接口完成,并且从不会对数据库自身产生影响,那么就可以使得数据持久层真正服务于用户所关心的业务。上述情况下,由于目前仍然没有可以将两种不同语言(比如 Java/C#和 SQL 数据定义语言 DDL)很好融合的实体定义,那么就可以在面向对象数据库后端,定义并实现一个面向应用的富领域模型。”

Ted 同时也就面向对象数据库试图要解决的双重模式问题阐述了自己的观点:

“[…] 在传统的对象关系世界里,存在两套实体定义:一个是由编程语言自身定义,而另一个使用 SQL DDL 关系模型定义。这将会产生一种先天的不足,因为在系统发展和改进的同时,两种实体定义都需要保持最新的状态,或者通过强制同步的机制(这通常被看作是使用代码生成的策略,或是通过从模式到类的转换以及其他方法完成),或者将两者分别编辑和比较并且在需要时手工调整映射。这为两种实现都带来了压力,并且常常使得开发者由于需要保持两种模型的单一程度,做出一定量的额外工作,来保证两者彼此之间的同步。 此外,在面向对象数据库管理系统中,实际上类定义是唯一的模式表现,意味着不会有双重模式的问题存在;域模型不需要被限制在存储定义之中,并且如果只为了支持富领域模型的存储,那么数据存储定义不需要使用不常见的形式来表示。”

一部分人对此观点表示赞同,比如 Andrew McVeigh 这样评论道:

“面向对象 --> 存储复杂的图形,在对象间快速索引和定位,且较少出现匹配错误。 关系型数据库 --> 数据独立性,适用于复杂的报表,更佳的 DDL 模式管理方式。

如果使用关系型数据库存储 CAD 系统的图表,或是使用面向对象数据库来为数据生成报表,则必定会为业务带来麻烦。”

然而,也有人反对这样的观点,特别是以 Gavin King 为代表,他撰写了为关系型数据库的角色进行辩护的文章。文中列出了他的看法,简单可以总结为如下几点:

  • 遗留数据需要对象关系映射 ORM——ORM 是处理现有模式或支持遗留数据的唯一方式,所以没有道理用其他的方式替换 ORM。
  • ORM 方便使用者操作数据库——如果使用者没有向后兼容的需求,ORM 可以为使用者生成映射和数据库模式。
  • 数据比应用更为持久——由于数据总是比产生数据的业务应用存在的时间更持久,所以需要有实体关系映射机制。
  • 面向对象数据库不利于保持兼容性——由于用户可以在数据库中存储强类型的对象,OODBMS 很难使用多重开发语言,反之在关系型数据库中的单一字符串和数字可以在各种语言下进行映射。
  • 面向对象数据库还远不成熟——由于比起关系型数据库,OODBMS 还远不成熟,所以在主流的数据库管理系统中还很难见到 OODBMS 的身影。
  • 面向对象数据库的评价标准还存在缺陷——面向对象数据库系统或是作为应用运行在相同进程之中,或是作为结果以不可拓展的方式存在,在小型的应用中这种方式可以接受,但是在大型应用中表现并不理想。对象关系映射由于其健壮的设计影响了实现效率,一旦面向对象数据库合并了健壮成熟的要素集,将会达到同样的速度。

特别是,Gavin 说道:

“可以明确的是,由于访问遗留数据的需求,除非已经存在相同的实现,使用对象关系映射技术不会引入映射或双重定义的问题。如果用户打算“存入数据库中一些对象”,将不需要编写单一的映射注释。所以从这一点来说,对于任意的用例,ORM 至少是与对象数据库的实现方式同样出色,并且对于处理对象数据库没有涉及的其他用例也表现良好。”

Gavin 进一步解释:

如果你认为相关技术也用作持久化应用的状态,那么你大概是想错了。关系模型的价值在于它是建立在同等的基础之上。任何一种程序设计语言都具备自身独特的价值。关系数据库是一系列技术的综合,而并非只是一种数据持久化的技术。技术的综合是非常重要的,这也是为何我们为技术所纠缠的原因。

同时这也致使 Ted Neward 对此进行很长的回复

“何时一种工具可以解决所有的问题?这自然有相应的理由,如果仅是出于“我们一直以来都是在使用关系型数据库”这样的理由,而认为类似 OODBMS 或 HODBMS(Hierarchically-Oriented Database System)这样的数据库不应该使用,那将必然是一个错误的想法。”

Ted 也就 Gavin 的观点进行了反驳,就双重模式的问题对 Gavin 的观点评论道:

“抱歉 Gavin,事实是这样的,你所言的观点是并将一直是我们之间意见的分歧之处,同时也是你和在研讨会中听到我发言以及一同讨论技术约定与分类的广大开发者之间的分歧之处。对于单一的数据表到函数类的映射,你的观点没有错误,因为实现方式较为简单。然而这仍旧是个双重模式的问题,因为你现在同时面对两种相互矛盾的技术,分别是数据库模式和对象模型,所以不得不只选择一种来接受。到目前为止,也许你曾参与过的项目中开发者都同时定义了两种模型,所以并没有出现什么问题,但如果是在面向企业级的解决方案中,数据库模式常常由 DBA 们来管理并在项目中设定,所以你将无法像更改对象模型那样灵活方便的操作和重构数据库模式。”

这场争论看似才刚刚开始——您为何不就上述观点也发表自己的评论呢?

查看英文原文: Debate: ODBMS sometimes a better alternative to O/R Mapping?

2007-06-19 19:001139
用户头像

发布了 74 篇内容, 共 12.8 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

从MongoDB迁移到TDengine后,成本显著下降

TDengine

数据库 tdengine 时序数据库 后端技术

查询优化技术解读:以分布式搜索引擎 Transwarp Scope为例

星环科技

一图看懂软件缺陷检查涉及的内容

华为云开发者联盟

安全 软件开发 软件缺陷 缺陷漏洞 防护

为什么需要会计CRM系统?

低代码小观

低代码 企业管理系统 ERP CRM系统

如何满足大数据集群服务功能真实需求?

星环科技

万字教你如何用 Python 实现线性规划

华为云开发者联盟

Python 函数 线性规划 求解器 单纯形法

Zilliz 上榜「中国科创好公司」

Zilliz

Linux网络管理技术-OSI七层模型和TCP四层模型

学神来啦

Linux 运维 TCP/IP syn OSI七层协议

一个有生命力的开源社区应该是怎么样?

科技热闻

浅谈大型商城的订单系统设计方案

北游学Java

Spring Boot 订单管理 Java、 项目 商城项目

netty系列之:从零到壹,搭建一个SOCKS代理服务器

程序那些事

Java Netty 程序那些事 SOCKS 12月日更

开源投资回报率高达4倍!欧盟委员会全力推动开源软件发展

腾源会

开源

我是如何把vue项目启动时间从70s优化到7秒的

CRMEB

技术揭秘!百度Geek说年度优质技术干货合集

百度Geek说

技术专题合集

技术教程 | 在线 KTV 实现过程(内附demo体验)

ZEGO即构

Java 音视频 在线KTV实现教程

小程序下一破局点?钉钉小程序卡片,应用与平台的深度集成

蚂蚁集团移动开发平台 mPaaS

前端 钉钉 移动开发 卡片技术

【云计算】私有云是什么?主要集中在哪些行业?与公有云有什么区别?

行云管家

云计算 公有云 私有云

ONES 解码:为何数字化是“超级工程”

万事ONES

数字化 ONES

开源公司IPO热潮已到来?市值153亿美元的HashiCorp带来了哪些启示?

腾源会

开源 开源商业化

Linux学习分享之标准大页和透明大页

@零度

Linux

如何提升软件测试思维?

和牛

软件测试 测试 测试右移

人和人差距是如何产生的

卢卡多多

28天写作 12月日更

【堡垒机】云堡垒机价格是多少?有几种计费模式?

行云管家

云计算 网络安全 等级保护 过等保

星环云原生数据湖,为企业精准决策提供全方位技术支撑

星环科技

超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓

华为云开发者联盟

Java spark 内存管理 Spark memeory Store memory Store

【日常工作】配置中心JVM堆外内存异常增长

MindController

【签约计划第二季】正式评审环节入选名单公布

InfoQ写作社区官方

签约计划第二季 热门活动

Linux之cp命令

入门小站

Linux

郭炜:就算倒在离开源成功最近的五米,也要让下一代开源人坚定前行

腾源会

开源 WeOpen Talk

【docker 总结】第五篇 - 制作镜像、数据盘

Brave

Docker 12月日更

国家质量基础设施NQI一站式服务平台系统开发建设方案

a13823115807

系统开发 质量基础设施“一站式” 平台建设

争论:OODBMS有时要比ORM方案略胜一筹?_Java_Ryan Slobojan_InfoQ精选文章