为什么面向对象数据库失败了?

12

这可能有点主观和具有攻击性。维基百科? - unwind
1
值得注意的是,即使没有面向对象的数据库,如今仍然可以使用ORM解决方案(例如Hibernate)完成您的第一个示例代码片段(虽然我明白样板代码仍然存在于某个地方...)。 - William
使用ORM,幸福快乐地生活。 - masm64
11个回答

14

可能是因为它们与特定的编程语言耦合性较高。


好观点。许多数据库需要被广泛的应用程序访问。 - Meta-Knight
将数据和编程语言解耦是良好的架构设计。我不喜欢在多个应用程序之间共享数据库。数据层中有太多的业务逻辑。 - ecoologic

10

首先,我不认为它们完全“失败”了。据我所知,仍然有一些公司在使用,但数量已经不多了。

无论如何,可能因为我们想要存储的大部分数据都具有关系性质,所以出现了这个问题。问题在于,虽然是的面向对象数据库更容易集成到面向对象编程语言中,但是关系型数据库更容易定义查询和存储的数据之间的关系。而这通常是复杂的部分。


4
如果我正在使用面向对象语言(Java或C#)编码,那么我拥有的任何具有关系性质的数据都会以对象的形式存在。因为在面向对象编程中,所有数据都被封装在对象中。 - user128807
仅仅因为在你的编程语言中一切都是对象,并不意味着在你的数据库中也应该全部当作对象处理。你可能需要执行那些不能直接映射到对象结构的查询。或者你可能会在同一个数据库中存储来自几个不同对象模型的数据。你可能会有不同的对象表示不同应用程序中的相同数据。 - jalf
Datomic 可以被视为一种对象数据库,只是不属于第一代类型。 - karmakaze

7

最近我在我的个人项目中使用了db4o(一种面向对象的数据库),因为它非常快速易用,无需过多细节。

然而,就我所见,这些数据库没有流行起来的主要原因是:

  • 面向对象数据库的报表更难生成。与此相关的是,在关系型数据库中手动查看实际数据更容易。
  • Microsoft和Oracle公司在关系型数据库上投入了大量业务。
  • 许多企业已经使用了关系型数据库。
  • IT部门通常拥有关系型数据库专业知识。

正如Jan Aagaard所指出的那样,最近问题已经以不同的方式得到解决,使程序员即使在针对关系型数据库编程时也能感受到面向对象的特点。


+1 是为了让报告和 IT 部门喜欢他们所知道的。 - Ian Ringrose

6

现在有无数应用程序将它们的数据存储在关系数据库中。这些数据是那些公司的命脉。他们共同投资了大量资源来存储、维护和报告这些数据。将这些无价信息转移到基本不同的环境中的成本和风险非常高。

现在考虑ORM工具可以将现代应用程序数据结构映射到传统的关系型模型,你几乎消除了任何迁移到OODBMS的动力。它们提供了一种低风险替代方法,避免了代价高昂的高风险迁移。


InterSystems M于1979年问世,恰好与Oracle发布的第一个RDBMS相同。我认为问题更多的是为什么ODBMS在80年代失败了。 - Alexey Zimarev

5

因为,尽管ODBMS广告中充斥着有关ORM系统的贬义语言,但让ORM系统完成工作并不难,而且不需要在转向纯ODBMS时承受各种打击。

实际上发生的是,您的第一个代码示例获胜了,只是它恰好位于RDBMS持久性层。


3

我认为这是因为问题被不同的方式解决了。当你在 Ruby on Rails 或者 LINQ to SQL 中编码时,可能在幕后使用的是关系型数据库,但感觉就像在使用对象一样。


2

非常主观,但我想到了几个原因:

  1. 性能不如关系数据库(或者至少人们的认知是如此)。

  2. 再次提到性能 - 关系数据库允许您对数据进行去规范化等操作以进一步提高性能。

  3. 遗留支持所有需要访问数据的非面向对象应用程序。


1
斯坦福线性加速器中心显然拥有世界上最大的数据库,它是一个面向对象的数据库。也许我错了,但对我来说,这间接说明了一些关于性能的事情。 - Halvard

1

我认为你的答案很大程度上在于“面向对象与关系型数据库”的“我们为什么放弃了对象数据库”的回答中。

就你的例子而言,它不必如此。Linq to SQL实际上是一个相当不错的基本层,可用于DBMS,而Linq to Entities(v2 - v1很糟糕)也将非常酷。Hibernate(N)已经使用RDBMS解决了你现在遇到的问题多年了。

所以,我想对你的回答是,O / R映射器正在达到解决您问题的良好程度,您不需要ODBMS即可获得所需内容。


1

他们总有一天会成功的。他们是未来。

回顾软件技术的历史,趋势是为了减少复杂性而牺牲性能(Assembly => C => C++ => .NET)。现在只需要30分钟编写的应用程序,在过去的某些日子里需要一个月的时间。

ORMs 是对错误问题的正确答案。目前,它们是选择,因为在没有更好的解决方案的情况下,它们使生活更轻松。但是它们无法处理它们旨在处理的复杂性水平。"问题不能通过创造它们的相同思维水平来解决。" A.E

正如其他人提到的,关系型数据库被广泛使用和依赖,并且替换它们会带来很多风险。看看 SQL 版本之间的间隔以及这些版本与其他 Microsoft 产品之间的主要变化(保守的方法,在这里是必要的)。此外,我还会添加以下项目:

  1. 目前的方法仍然有效。你可能会争辩说它将永远有效(我们可以编写汇编语言),但我指的是当项目复杂度的平均水平和在关系数据库上开发它们所需的时间响起警钟时,它在逻辑上不起作用。
  2. 大公司没有认真参与。当市场发出信号时,他们会这样做。
  3. 问题尚未明确定义。不幸的是,当前的失败有所帮助。
  4. 它需要在其他科学领域(QC、AI)进行一些改进,而不是计算机。在理论层面上,存储和查询多维数据的扁平基础设施以及缺乏自组织的智能是最大的障碍。

0

为什么不呢?

我猜他们是为了解决一个没有人遇到的问题,或者是因为没有足够的人愿意为此付费。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接