为什么面向对象的数据库不普及呢?

本人是一名大三的学生,近来迷上了J道,吸收了很多知识,
觉得中国的软件为什么发展这么慢.也有仔细思量..
还有就是现在主流的三层架构或者是多层架构,而瓶颈就在于数据库的性能
跟不上需求,换句话说,也就是数据库的设计拖了现在软件的后腿.
所以就郁闷,为什么OO和关系型数据库按照两个截然不同的理念可以并存
而不去使用面向对象的数据库呢?
我自己有些见解,不知道是否正确:
1.关系型数据库的设计接近于计算机硬件,使得关系型比面向对象的数据库性能要好得多.
2.现在使用关系型数据库的企业太多,更改数据库会使成本上升.
3.数据库开发厂商致力于纯XML,整合SOA,忽略了这方面的需求

真希望哪天能有厂商站出来跟关系型数据库进行竞争,就想当初的C挑战Fortran,Pascal,C++挑战C,JAVA挑战C++一样...得益的是我们众多的开发工作者啊,我也没有针对关系型数据库,毕竟存在就是合理这句话还不是盖的.只是希望能像ROR的出现一样提高我们的开发效率,可能也是等N年之后的事情了.

鄙人不懂言语,但系言在肺腑,希望各位指教指教,不胜感激!
[该贴被boby2046于2007年04月27日 19:48修改过]
[该贴被boby2046于2007年04月27日 19:48修改过]

我认为有下面原因:

1. 从分析设计方法来讲,对象化的分析方法比数据化分析方法更自然方便,而且这两种方式存在不匹配,不能互相替代,所以,就存在0和1的取舍问题,很难调和在一起.对象数据库很难让人明白,到底是对象呢还是数据库呢?

2.使用对象化的中间件在性能扩展上比较廉价,可以防止单点风险和进行集群,这是分布式计算发展,而围绕数据库容易走上集中式中大型机,这是过去cobol/db2等形式,已经存在严重瓶颈.

3.关键我们需要重新看待对象和数据库关系,数据库只是对象存储的地方,一个技术介质,几乎和业务概念一点关系没有,精通业务流程的人以前必须了解数据库这些具体技术才能做出软件,而现在和将来就不需要了,他只要用对象表达他的分析概念就可以了.

以oo为中心或者以db为中心,其实都有各自存在的理由.
想法不要太极端
业务只是对数据的整合而已,当面对不同的层面,使用不同的思想去考虑
不要为了oo而oo

瞎猜想, oo数据库还以另种形式会死灰复燃的.

关系数据库的成功主要是因为目前商业用途上的成功.

oo数据库其实是最接近实现semantic web存储介质的可能.建议楼主可以朝那个方向走.
semantic web虽然概念早在十多年前就提出了,但是目前仍然是全世界大学研究的课题.我在大学的时候,导师是这方面的世界级泰斗.我也曾为他开发过部分引擎的代码.

但是搞这方面的东西很痛苦,ontology,reasoning, a-box,b-box....相比还是开发企业系统简单:D

我的意思是,被冷落甚至淘汰的技术不一定是不好的技术.譬如google和搜索技术.

谢谢各位对我的疑问的关注.

回banq:
使用数据库的目的是在于持久化存储,这点我是承认的,但目前很多的设计也把业务上的一些逻辑掺杂到数据库设计中去了,虽然我们可以按照OO的设计思想去绕开这些问题,但并不是所有的遗留系统都像我们想象中那样的.一些习惯于过程式思考的程序员遗留下来就会跟我们的OO建模有所冲突,国内的一些项目的频频返工的原因可能在此.

然后探讨一下中间件的成本问题,的确目前的情况下中间件是占有很高的伸缩性和可重用性,节省了很多的成本,用OO的思想进行持久化不是更符合我们的思维吗?关系型数据库我相信是中间过渡的产物,按照多层结构我们应该把数据库设计的重任退到了ORM层实现,这对ORM的框架产生了依赖,相当大的性能取决于框架本身甚至是DAO上的性能优化而不是对数据库的设计进行一些设置来实现,这也是banq振臂高呼数据库时代已经终结的原因吧.

但我相信即使现状如此也不一定说数据库的时代不会再来临,从Ajax上可以看到,oo+数据库的兴起还是有可能的,问题是商业化,也就是大型厂商的推动是很重要的,不然没有那个项目能冒这个险.

我的项目经验不是很多,各位可能觉得我说的观点幼稚或者空洞,请大家谅解,不过我都是经过思考才发言的,

回 gougou3250:
嗯,我承认你的观点是从理性出发的,是要根据需求进行分析,而不是单以OO为中心或以DB为中心,不知道我说得对不对?

从技术的层面说,老实说,做技术的要Update的要快,不然就被淘汰了,对技术上做一些预测或者评论还是无伤大雅的.

回 GuaGuaGua:
google了一下.这几个名词对于我这些入门级别的确实有点深奥,按我的理解,semantic web其实就是RSS一类的东西,整合了WEB的数据共享和XML严谨的数据结构,

之前曾经萌生过一个想法:中间件的相当红火,而操作系统,数据库这两类基础类软件在中国呈现弱势,几乎为外人所垄断,虽然不乏红旗的品牌,麒麟的出现无疑是使人痛心的.故有所构思能否用纯OO的设计理念设计一款可以与一些外商的数据库竞争的产品呢?做出中国的oracle来,我相信还是会有这一天的.

把逻辑掺杂到数据库中去,也就是一些存储过程吧.适当的使用一些存储过程来提高效率,不觉得有什么不好的.至于你对orm层的看法,我觉得可能是没怎么做过项目吧,非常片面的看法,用orm跟用数据库其实没什么区别,相反如果技术使用恰当,还能提高效率
从ajax上,我没看到任何跟oo与数据库有关的东西.ajax只是web页面局部刷新,跟你说的东西完全无关

这个话题很有意思,但我感觉大家都没有分析到点上,呵呵,斗胆说一声,大家别拍砖.

下面是我对"为什么面向对象的数据库不普及呢"的分析:
第一:关系数据库的基础是关系理论,而关系理论发展到今天已相当完备.
如关系理论中的关系范式(1NF-5NF) ,数据完整性约束等等.
基于这些理论之上,有了SQL.

而所谓的对象数据库,并没有严格的理论支持.在解决"对象关系"理论之前,做不
出对象数据库产品.比如我们都知道对象间的关系有:聚合,组合,关联,继
承.但这些不是理论,而是实践结果.不能从理论上推导出这些关系,也就无法实现出支持这些关系的对象数据库.


楼上切入角度深入,非常赞同。

补充如下:正是因为对于对象“不能从理论上推导出对象聚合,组合等关系,也就无法实现出支持这些关系的对象数据库.”,既然无法实现,也就没有必要发明对象数据库,也就没有必要使用数据库方式来实现对象关系,所以现在还是使用关系理论代为对象关系的持久。

很久的帖子了,最近在javaeye里混着学groovy,做java的开发还是要学习不少技术啊..

嗯,chen8251的意思我大概理解,就是面向对象的标准还没有形成,而关系型数据库的标准SQL已经深入人心了。但是,优秀成熟的OO模型,拥有一个大的社区与开发力量,如果结合XML的数据表达能力,那OO的数据库可以取代关系型,就不需要所谓的OR/Mapping了,所有一切都可以用对象进行处理,问题是迟迟没有这方面的标准,这是我很难理解的原因之一(关系数据库也开始拥抱纯XML了,DB2),绝对是比关系模型优秀的多,无论是聚合,组合等关系。可能是我用hibernate一些OR的东西多了,觉得真正的WEB开发应该从关系的层面中脱离出来,正如banq所说的数据库为中心的时代已经终结一样,程序员更应该关注业务逻辑,那持久化层剩下的任务只是做效率和性能的提高了。

的确。正如banq分析的那样,用oo的思想是要有技术修为的,hibernate容易用,但是要做到真正运转起来顺畅,快速敏捷,那是不容易的,效率仍然还是最大的问题。

我想,如果有了面向对象数据库,是否还要面向对象的硬件呢?

计算机本来是一堆2进制码,如果真有人做出面向对象的数据库,但是层层封装不知要消耗多少性能,将这些复杂的逻辑表示为算法恐怕极难。OO是开发上的思路,最终也要归结为2进制码,对于数据我想有现在的ORM足够了。

gougou3250,我很想有机会和你探讨一些问题,并且对“拖拉”式开发Ajax应用感兴趣,能否和在下私下联络一下呢?我QQ396686。

真有意思哈,一个文本文件,前后两头加个标识符,就是XML了.还要研究生学历才能学.从算法上来讲,用XML来实现数据库不是没有可能,关键是XML这种文件格式处理速度的问题.

今后技术更新会越来越快,楼主所期望的对象数据库替代关系数据库的那一天也许永远也不会来临。而且,ODB与RDB相比,技术上还远远没有成熟。十年前,OODB、ORDB等曾经被吹捧得很高,但是,他们的表现与实际相差甚远。当年关系数据库盛行对象扩展时,Informix收购了Illustra,DB2/oracle中都增加了对象扩展,实际效果都不理想。

主要原因:关系型数据库现在还可以给行业的龙头老大们带来巨额利润,所以他不可代替。即使对象数据库再成熟,没有钱砸到市场里去推,有谁会用呢?即使关系型数据库再不成熟,投上几亿美金做市场,你说他能推不出去么?
不过现在的情况对象数据库确实还不够成熟,尤其是需要进行批处理的情况下