写点什么

争论: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:001184
用户头像

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

关注

评论

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

裸辞在家闭关修炼,意外发现一份据说是从阿里内部泄露出来的《Java程序员金三银四面试秘籍》

Java架构之路

Java 程序员 架构 面试 编程语言

国产监控夜莺v4来了,大幅降低部署维护难度

巴辉特

Nightingale 滴滴夜莺

一天下载量突破9000000!限时分享:阿里Java架构师成长笔记(2021版)

比伯

Java 架构 面试 程序人生 计算机

低代码:正在改变软件的开发方式

华为云开发者联盟

软件开发 低代码 低代码平台 华为云应用魔方 AppCube

MySQL常用引擎及优缺点

Sakura

4月日更

破十亿浏览量的阿里最新Java架构师成长笔记开源!

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

Disruptor 源码解读

lich0079

Java volatile Disruptor CAS Concurrent

阿里员工:最惨P7,33岁才28K,感觉没有前途了。网友调侃:最美逆行者

程序员生活志

全球案例 | 霍尼韦尔:Atlassian 帮助我们在疫情期间拯救生命

Atlassian

敏捷 Atlassian Jira 远程协作 霍尼韦尔

裸辞还可以吊打大厂面试官?四面拿到阿里、字节offer后我还是选择了美团!

Java架构师迁哥

凡尔赛?拿到阿里offer只用了29天?

Java架构师迁哥

会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准

阿里云CloudImagine

阿里云 视频压缩 VVC

anyHouse-iOS 高仿ClubHouse

anyRTC开发者

ios 音视频 WebRTC RTC 语音通话

Redis持久化方案介绍之RDB方案

大数据技术指南

redis 4月日更

腾讯万字Code Review规范出炉!别再乱写代码了

程序员生活志

Rust从0到1-枚举-if let控制流

rust 枚举 if let

这几道面试题,难倒了牛客网98%的程序员,刷完后直接斩获9个大厂offer

Java架构师迁哥

用知识点+实例+项目完全深入地讲解springboot原理,这份《springboot实战派》火了!

Java架构之路

Java 程序员 架构 面试 编程语言

如何打造高效技术团队|专访前美篇首席架构师张超

穿过生命散发芬芳

调查采访能力考核

【签约计划】行业分析能力考核成绩公布

InfoQ写作社区官方

签约计划 热门活动

我很久没写代码了,但我是个好架构师

四猿外

Java 程序员 系统架构 架构师 代码

iMazing 一款替代iTunes的数据备份软件

懒得勤快

ios Mac imazing 手机管理

【全网首发】2021年移动开发iOS进阶提升方案,内附详细视频知识点解析和思维导图!【强烈建议收藏!】

flutter swift 数据结构与算法 ios开发 iOS逆向

《专访阿里研究员吴翰清:大数据时代下,如何保障网络安全和用户隐私》(采访提纲)

三掌柜

调查采访能力考核

疫情影响到底有多大?《2020年移动互联网报告》深度解读垂直行业变化趋势

Lily

【只要努力,方能成功。】四面字节跳动Java研发岗,成功斩获Offer。分享4面技术面真题及复习资料!

Java架构之路

Java 程序员 架构 面试 编程语言

从Map和Reduce角度谈Hive优化

五分钟学大数据

hive 4月日更 hive性能优化

华为云PB级数据库GaussDB(for Redis)揭秘第八期:用高斯 Redis 进行计数

华为云开发者联盟

redis GaussDB(for Redis) 计数器 计数

GitHub开源:100美元自制激光雷达

不脱发的程序猿

GitHub 开源 DIY 4月日更 激光雷达

三色标记原理,我给应聘者问懵了...

华为云开发者联盟

Java 节点 三色标记 SATB算法 回收器

留存率计算

Flychen

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