为什么面向对象的数据库失败了?
我觉得很惊讶:
foo bar = new foo();
bar.saveToDatabase();
迷失:
foo bar = new foo();
/* write complicated code to extract stuff from foo */
/* write complicated code to write stuff to database */
相关问题:
Are Object oriented databases still in use?
Object Oriented vs Relational Databases
Why have object oriented databases not been successful (yet)?
答案 0 :(得分:13)
可能是因为它们与特定的编程语言耦合。
答案 1 :(得分:9)
首先,我不相信他们完全“失败”。还有一些,据我所知,它们仍然被几家公司使用。
无论如何,可能是因为我们想要存储在数据库中的大量数据本质上是关系型的。 问题在于,虽然是,但OO数据库更容易集成到OO编程语言中,关系数据库使得更容易定义查询以及存储的数据之间的关系。这往往是一个复杂的部分。
答案 2 :(得分:6)
有无数的现有应用程序将其数据存储在关系数据库中。这些数据是这些公司的生命线。他们共同投入了大量资金来存储,维护和报告这些数据。将这些无价的信息转移到一个根本不同的环境中的成本和风险非常高。
现在考虑ORM工具可以将现代应用程序数据结构映射到传统的关系模型中,并且几乎可以消除任何迁移到OODBMS的动机。它们为非常昂贵的高风险迁移提供了低风险的替代方案。
答案 3 :(得分:5)
因为,尽管ODBMS广告中充斥着关于ORM系统的贬义语言,但是让ORM完成这项工作并没有那么难,并且没有在转换到纯ODBMS时采取各种各样的点击。
实际发生的是您的第一个代码示例获胜,它恰好位于RDBMS持久层上。
答案 4 :(得分:5)
我最近在个人宠物项目上使用db4o(一个面向对象的数据库),因为它的设置和安装速度非常快。开始吧没有必要的细节,坚韧不拔的细节。
除此之外,正如我所看到的,它们未受欢迎的主要原因是:
正如Jan Aagaard所指出的那样,最近这是因为问题已经以不同的方式解决了,即使他们针对关系数据库进行编程,也会给程序员提供面向对象的感觉。
答案 5 :(得分:3)
我认为这是因为问题得到了不同的解决。当您使用Ruby on Rails或LINQ to SQL进行编码时,您可能在后台使用关系数据库,但感觉就像使用对象一样。
答案 6 :(得分:2)
非常主观,但有几个原因浮现在脑海中:
性能不如关系数据库那么好(或者至少是那种感觉)
再次使用性能 - 关系数据库允许您执行诸如对数据进行非规范化以进一步提高性能等操作。
对需要访问数据的所有非OO应用程序的传统支持。
答案 7 :(得分:1)
我认为你的答案很多都在于“为什么我们放弃了对象数据库”的答案“面向对象与关系数据库”。
就你的例子而言,它不一定是那样。 Linq to SQL实际上是一个相当不错的DBMS基础层,Linq to Entities(v2-v1 sucked)也很酷。 (N)Hibernate已经使用RDBMS解决了你多年来遇到的问题。
所以我想我的回答是,O / R地图制作者已经达到了很好地解决问题的程度,而且你不需要ODBMS来获得你需要的东西。
答案 8 :(得分:0)
为什么不呢?
我猜他们可以解决没有人遇到的问题,或者没有足够的钱来支付费用。
答案 9 :(得分:0)
此外,OOP和基于集合的编程并不总是非常复杂。 就个人而言,当我开始阅读有关OO数据库的文章时,我忍不住想想“男孩,我希望我永远不必在其中一个上工作,从600万行表中更新100万行,然后确保所有适当的记录在其他表中也得到更新“
答案 10 :(得分:0)
他们有一天会成功。他们是未来。
回顾历史上的软件技术,趋势是牺牲性能以降低复杂性(Assembly
=> C
=> C++
=> .NET
) 。现在需要30分钟编写代码的应用程序,过去几天需要一个月。
ORMs
是对错误问题的正确答案。目前,它们是选择,因为它们在没有更好的解决方案的情况下使生活更轻松。但他们无法处理他们所针对的复杂程度。 “问题无法通过创造它们的相同思维水平来解决。”A.E
正如其他人所提到的,关系数据库被大量使用和依赖,并且替换它们会带来很多风险。查看SQL版本与这些版本与其他Microsoft产品之间的主要更改之间的间隔(保守方法,这是必需的)。我还将添加以下项目:
QC
,AI
)中需要一些改进而不是
电脑。在平面上存储和查询多维数据
基础设施并没有足够的自我组织智慧
理论层面的最大障碍。