为什么关系数据库的更常见于面向对象的数据库?

如果用面向对象编程模式是如此广泛,我们不应该看到很多oodbms缺乏?他们不会执行更好的比RDBMS+或/M?

有帮助吗?

解决方案

一个原因RDBMS保留普及,它的成熟技术,公知的并有一个标准的语言(SQL),其支持多个供应商。它也有几个很好的接口,如ODBC和JDBC,使其用不同的语言连接得很好。稳定的API是在保持一个技术优势的一个重要因素。

相反,存在用于OODBMS没有明确的模型,也没有一个标准的语言,也没有一个标准的API。即使这里没有通过具有领先供应商实现了事实上的标准。

在OODBMS概念的可能执行除RDBMS + ORM更好。这完全取决于执行。但它也确实OODBMS不解决相同的一组RDBMS善于解决问题。一些数据管理任务要容易得多,如果你有参照完整性和数据管理解决方案执行的关系头。这些功能是在OODBMS模型(至少到目前为止)。

不存在

有对博客是关系型数据库已经过时了很大的噪音,而RDBMS仍然是一个伟大的大部分数据管理任务最通用的解决方案。

其他提示

我见过的最大的问题是缺乏标准化的。在RDBMS的世界里,你可以用任何随机数据库变得相当远,如果你知道SQL。他们基本上都实现它,需要有少许变化。我不知道一个现有的RDBMS那不SQL:你几乎可以用“RDBMS”和“SQL”互换

用于OODBMS最接近的事是也许OQL,这一直是一个彻底失败。

没有数据库曾经实行很多的吧。我几年前使用一个相当不错的商用面向对象数据库系统,但(截止到2007年左右,它是在重大版本8或9),它甚至不支持查询其名称的对象。该手册只是说,OQL的这部分,他们已经不在身边得到呢。 (我不知道,但你可能已经能够下拉到本机调用做到这一点。)

我见过

大多数对象数据库最近有本地语言的接口,而不是像OQL查询语言。我使用的系统,例如,支持(仅!)Perl和VB,IIRC。限制你的听众只有一对夫妇的语言(或强迫他们写的包装,因为我们所做的)是不战而胜的朋友的方式。

正因为如此,有没有竞争,因此不容易的备份计划。如果你把你在MS-SQL和Microsoft数据停止支持它,你也许可以转储数据向Postgres和端口您的疑问,没有太多的麻烦。 (这可能是大量的工作,如果你有很多疑问的,但我不怀疑你能做到这一点。这是一个痛苦,但不是技术上的挑战。)或Oracle,或MySQL,或许多其他国家,包括商业和自由。

没有这样的事情存在与OODBMS:如果您使用的是一个去腹向上,或他们把它在这不是对你有用一个方向,或者你发现它缺少你需要的关键功能,你可以”牛逼只转储数据到面向对象数据库竞争和端口查询。取而代之的是,你在谈论改变一个核心库,使大规模的结构变化。所以实际上,你只限于商业OODBMS谁您相信(你能说出连一个?),或者你信任你的团队一个开放源码的面向对象数据库维护,当事情变坏。

如果这听起来像FUD,对不起,我不打算说。但是,我一直在那里,并从项目管理的角度来看,我会毫不犹豫地回去,即使编程环境可以是美好的。想起来了另一种方式是:,看看如何流行的函数式编程是今天,尽管一个好主意,它是什么。面向对象数据库系统是这样的,但糟糕的是,因为它不只是你的代码,但你的代码和数据。我今天很高兴地开始在二郎山一个重大项目,但我还是会毫不犹豫地使用OODBMS。

OODBMS供应商:改变这一点,你需要可以很容易地让你的竞争对手。你可以挖OQL和实际执行的是,或像ODBC,或任何API级别做到这一点。即使是标准转储格式(使用JSON?),并从导入/导出到/数OODBMSs工具,将是一个很好的开始。

数据经常住更长且比节目更重要。所以,即使你从今天开始绿地的发展,你必须考虑大局。还有更多的工具,流程和经验丰富的专家RDBM系统工作。想超越程序,怎么样容量规划,数据挖掘,报告,ETL,整合与其他数据源等,谈谈你公司收购另一家公司,从而把他们所有的关系型数据在你的程序。 RDBMS和相关工具是如此根深蒂固,成熟和强大,我不存在使用别的任何战略意义。 在一些小众,但也许不一般。

对象数据库有一个非常好的利基像表示例如几何问题CAD系统,在那里对象图可以很深刻的确实。 JOIN性能迅速降解为约7表中的大多数关系系统,所以在CAD深自引用结构对象数据库更好的表现。

像财务数据

但是,重要的应用借给自己关系表示。关系模型有一个坚实的数学基础,SQL是一个成功的和流行的语言。没有什么激励措施,为金融机构如银行,券商和保险公司从RDBMS中切换出来。

为繁琐的例子OODBs和Rdb可能有很大的不同。特别是如果您使用的是一个小足够量的数据,你可以平凡读它的所有进入存储器,并把它写出来的一次。但是,最终象数据库的需要保存的数据在一个非常RDB样的格式-他们不是那么不同。

考虑一个意图的对象可以使用的应用程序。每个对象可以通过引用几个其它的对象。当保存一个曲线图的对象,你不想要保存对象多次每次他们被引用。对于一件事情,如果你有任何种循环或自我参考你的节目的方法将进入一个无限的循环。但在一般情况下,这是一个浪费空间。相反,任何重大的数据储存的需要宣布一个独特的标识的每个对象被保存(一个关键的,通常是一种替代的关键在RDBMS言)。每一个其它的对象,参考文献,它节省的对象的类型和关键的,它不能拯救整对象的反复。因此,我们在这里已经重新外键在我们的非RDB对象的商店。

接下来,假装我们要存储的对象的列表(A1、A2、A3...)有关的另一个目(B)。我们已经建立,我们将存放钥匙的而不是挽救自己的对象的两倍。但是你的商店的钥匙对象A1、A2、A3...在目B,或者你的店的关键对象B上?如果你将它们储存的第一种方法,你有一个是你想要的,你可以快速地抓住有关的B的。第二种方式的情况正好相反。但无论哪种方式是单向的交易。如果你想要查询相反的是什么你储存和你的对象是存储为XML或式,这是一个很大的低效率的分析过最无关紧要的信息找到的钥匙在每个文件。那岂不是更好地将它们存储在一个格式,其中每个领域分开,就像中的列表?

在一个"多对多"关系或情况你需要找到一个大数目在两个方向,这一战略变为效率很低。只有高性能的解决办法是做一个帮助对象中存储的关系,与一个文件对于每个关系这样的文件,包括关键的A和B键,以便他们可以抬起头很快。我们只有重新发明的交叉参考表。

表列,唯一的标识符(键)的交叉参考的表格...这些是基本的需要用于存储目的的方式,他们可以检索的效率。嗯...那声音像什么熟悉?一个关系数据库提供的正是这一功能。另外,多个供应商有竞争,几十年来提供的最快数据存储和检索的最佳工具,用于备份、复制、群集、查询,等等。这是一个很大的新技术与竞争。最终我是说RDBMS基本上都是一个很好的解决问题的有效对象的储存。

这就是为什么喜欢的东西休眠存在-把一种面向对象的接口上的一个高效率的存储RDBMS系统。你在哪里看到其他种类的储存真的很闪耀的不同问题领域:

  • 对于任何一种结构化文档的存储(博客、来源的控制,或任何不能地图来行和列),各种非sql数据库的理想
  • 保持一个易于查询而有意义的历史性变化(比较喜欢在源的控制)是不是真漂亮在Rdb.像Datomic可以建立新的领土在这里。
  • 任何时间你的对象图是简单或小的开销,一个数据库可能不是必需的。

OODBs无法执行更好的比Rdb因为他们是不是根本的不同。
Rdb留在这里因为节省了大图象中的一种方式,是空间效益和时间效率的两个保存和检索,并且还故障容忍和有一些保证数据的完整性的问题,Rdb旨在解决放在第一位。这就是为什么访问用户和休眠在这里住得好-因为他们之间的桥梁的目的和关系模型的数据。目模式为便于操作存,关系对于持久性。

在一个字的互操作性(大在周五晚上字

大多数企业都有与RDBMS运行的遗留系统的工作。如果他们使用面向对象数据库,他们仍然需要访问RDBMS的某些功能。它更容易保持访问超过两个数据的一种方式。

当你有大牌,如Oracle,并在世界上面向对象数据库SQL Server和在各种环境中经过验证的性能,那么你会使用它们有更多的项目。

我认为是的情况

  

如果不破不改变它。

关系数据库是非常根深蒂固。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top