3

只是认为具有 ORM 的关系数据库在许多方面与面向对象的数据库非常相似。我的经验仅在于带有 ORM 提示的 RDMS,因此在我看来,面向对象的数据库非常相似,但没有经验我不能肯定地说。

如果您使用过面向对象的数据库和 ORM,您可以比较它们吗?与 RBMS+ORM 相比,面向对象数据库的弱点是什么?

4

3 回答 3

5

与 RBMS+ORM 相比,面向对象数据库的弱点是什么?

最大的弱点是缺乏标准化:没有标准的 API,没有标准的查询语言(OQL 尝试是一个很大的失败),因此缺乏可移植性和可互操作的工具(用于备份、归档、迁移等)。当涉及到数据时,您不希望这样。

这解释了 IMO 为什么从采用的角度来看 OODBMS 是失败的,以及为什么 RDBMS 会保留一段时间,而不管 NoSQL 运动如何(我感觉 OODBMS 供应商将 NoSQL 运动视为经过一段时间后卷土重来的机会对其产品进行品牌重塑)。

于 2010-05-20T15:42:39.743 回答
3

我的经验:

  • 关系型数据库:
    • 坦率地说,我不喜欢使用 SQL,这是一种有 15 年历史的语言,但现实情况是,如果您想要任何可用的东西,例如批量插入(LINQ-to-Entity ORM 框架不支持批量插入,因此插入 20,000 条记录需要 30 秒,而 SQL 中的批量插入需要 500 毫秒)。您最终不得不使用 ADO.NET 进行数据库插入。
    • 与对象数据库相比,RDBMS 有一些优点,即数据独立于调用应用程序(然而,这也是一个弱点,因为映射层使一切变得更慢、更复杂和更脆弱)。
    • 底线:使用 LINQ-to-Entity ORM 框架和 Microsoft SQL Server 2008 R2 花了 6 周时间。相当陡峭的学习曲线。
  • 对象数据库:尝试了一个对象数据库,即免费的开源db4o
    • 发现我可以用一行代码持久化我的对象。
    • 没有要处理的架构更改,它只是工作。
    • 即时支持 POCO(普通旧类对象)。在代码中创建你的类,然后持久化它。它可以对实体框架做同样的事情,但是,它需要大量的手动映射工作,而且很容易中断。
    • 打开透明持久化,它在后台自动延迟加载——不再检查因为实体框架中的延迟加载而没有加载的对象。
    • 对象数据库的性能也令人印象深刻:如果您在对象数据库中有 1000 万行,并且打开了索引,则三列选择的时间为 16 毫秒。那是体面的。
    • 底线: 1 周后,我获得了与使用 RDBMS 进行持久性相同的解决方案,但是,它更干净、代码更少且更易于维护——如果我真的想要,我可以使用服务来同步 db4o 数据库与 MSSQL。

对于企业世界中真正的大型系统,例如一个表中包含 2.5 亿行,诸如分片和诸如聚集索引非聚集索引之类的选项对于性能来说变得很重要。在这种情况下,db4o 不起作用,它可能需要更多的企业。但是,如果您使用一种非常简单的方法来持久化对象,那么对象数据库将适合您。学习 SQL、在 ORM 中设置映射、处理 MSSQL 的安装、实现自己的批量加载过程等所有工作都消失了,只剩下干净、优雅的 100% 托管代码。

我怀疑供应商没有接受对象数据库的原因之一是数据库市场每年价值 30 亿美元,目前还没有理由杀死摇钱树。

免责声明:我与Microsoftdb4o没有任何关系。

于 2011-02-26T12:41:07.380 回答
2

Chris Date 同意:

...“对象/关系”系统只不过是一个真正的关系系统......一个适当的对象/关系系统只是一个具有适当类型支持的关系系统......这只是意味着它是一个适当的关系系统,不多也不少。

SQL 和关系理论:如何编写准确的 SQL 代码,第 36 页

于 2010-05-21T13:36:16.837 回答