关系型数据库比面向对象数据库更普遍的原因是什么?
如果面向对象编程范式如此普及,我们不应该看到很多OODBMS吗?它们难道不比RDBMS+OR/M表现更好吗?
关系型数据库比面向对象数据库更普遍的原因是什么?
如果面向对象编程范式如此普及,我们不应该看到很多OODBMS吗?它们难道不比RDBMS+OR/M表现更好吗?
关系型数据库管理系统(RDBMS)之所以保持着流行,有一个原因是其作为一项成熟技术被广泛理解,并且拥有多个供应商支持的标准语言(SQL),同时还有一些像ODBC和JDBC这样的优秀接口,可以非常好地与不同语言连接。稳定的API是保持技术主导地位的一个强有力的因素。
相比之下,面向对象数据库管理系统(OODBMS)没有明确的模型,也没有标准语言或标准的API。甚至连领先的供应商实现都没有形成事实上的标准。
可能性来说,OODBMS概念比RDBMS+ORM表现更出色。但这完全取决于具体实现。但同时也要认识到,OODBMS不能解决RDBMS擅长解决的一组问题。如果你需要数据管理解决方案执行引用完整性和关系头,则某些数据管理任务将更容易完成。而这些特征在OODBMS模型中是缺失的(至少目前是如此)。
博客上存在大量声音认为关系型数据库已经过时了,但实际上RDBMS仍然是绝大多数数据管理任务的最佳通用解决方案。
如果这听起来像FUD,抱歉,我没有这个意图。但是我曾经经历过这种情况,从项目管理的角度来看,即使编程环境可能非常好,我也会犹豫再次尝试。另一种思考方式是:看看今天函数式编程有多么流行,尽管这是一个好主意。OODBMS就像这样,但更糟,因为它不仅涉及你的代码,还包括你的代码和数据。我很乐意今天在Erlang中启动一个重大项目,但我仍然会犹豫使用OODBMS。
OODBMS供应商:要改变这种情况,你需要让用户容易离开你去找竞争对手。你可以挖掘OQL并实际实现它,或者像ODBC一样在API级别上实现它,或者其他方式。甚至一个标准的转储格式(使用JSON?),以及用于将多个OODBMS导入/导出到该格式的工具,都是一个很好的开始。
数据通常比程序更重要且具有更长的生命周期。因此,即使您今天开始进行全新的开发,也必须考虑整体情况。有更多的工具、流程和经验丰富的人在使用关系型数据库管理系统。请不要仅局限于程序方面,还需考虑容量规划、数据挖掘、报告、ETL、与其他数据源的集成等方面。如果您的公司收购了另一家公司并将所有关系型数据带入您的程序中,那么该怎么办?RDBMS及其相关工具已经深入人心,被证明非常强大,我认为使用其他任何东西都没有战略意义。也许在某些小型细分市场中可能会使用其他技术,但总体而言,不建议这样做。
对象数据库在解决几何表示问题(例如CAD系统)等方面有非常好的应用领域,其中对象图可以非常深。在大多数关系型系统中,当涉及到7个或更多表时,JOIN性能会迅速下降,因此在CAD中具有深度自引用结构的情况下,对象数据库的性能更佳。
但是像金融数据这样的重要应用程序适合使用关系型表示。关系模型具有坚实的数学基础,SQL是一种成功和流行的语言。对于银行、经纪公司和保险公司等金融机构来说,没有太多动力从RDBMS转换。
面向对象数据库(OODBs)不能比关系型数据库(RDBs)表现更好,因为它们并没有根本区别。
关系型数据库会一直存在,因为以节省空间、节省保存和检索时间、容错性以及一定数据完整性保证的方式保存大量对象图形是关系型数据库最初设计解决的问题。这就是为什么JPA和Hibernate也会一直存在 - 因为它们弥合了对象模型和关系模型之间的差距。对象模型用于内存中的操作方便,而关系模型用于持久化。
总之,互操作性(周五晚上的一个大词 <G>)是关键。
大多数企业必须使用运行在RDBMS上的旧系统。即使他们使用OODBMS,他们仍需要访问RDBMS以执行某些功能。只维护一种数据访问方式比两种更容易。
当你拥有像Oracle和SQL Server这样的大型OODBMS名称,并在各种环境中证明了性能,那么你将看到更多的项目使用它们。
主要问题是索引!
对于标量值进行索引真的很好……只需排序即可。
对于具有许多属性、方法、部件、组件等的值,没有通用规则……
因此,面向对象数据库管理系统像恐龙一样消失了!
但是关系型数据库管理系统供应商集成了一些功能,可以在数据库中存储对象,例如 XML(有时需要进行研究和开发以找到特定实际使用对象的索引方式,但这非常困难……),还支持存储任何类型的对象(无法对其进行索引……)通常在 Java(Oracle)或 .net(SQL Server)中。
我认为这是一个
不破不立。
关系型数据库非常根深蒂固。