面向对象数据库是否比带有ORM的关系型数据库更好?

3

仅仅思考一下,带有ORM的关系型数据库在许多方面非常类似于面向对象的数据库。我的经验仅限于RDMS和少量ORM,因此我认为面向对象的数据库非常相似,但是没有经验,我不能确定。

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


1
这个问题非常广泛和主观。需要成为社区维基。 - Adam Crossland
3个回答

5
与RBMS+ORM相比,面向对象数据库的弱点主要在于缺乏标准化。没有标准API,没有标准查询语言(OQL尝试已经失败了),因此缺乏可移植性和互操作工具(备份、存档、迁移等)。在处理数据时,您不希望出现这种情况。我认为这就是为什么面向对象数据库从采用的角度来看是失败的原因,以及为什么关系型数据库将会继续存在一段时间,无论NoSQL运动如何发展(我有一种感觉,面向对象数据库供应商将视NoSQL运动为一个机会,在重新包装其产品后卷土重来)。

3

我的经验:

  • RDBMS:
    • 说实话,我不喜欢使用SQL这种15年历史的语言,但现实是如果你想要可用的东西,比如批量插入(LINQ-to-Entity ORM框架不支持批量插入,所以对于20000条记录的插入需要30秒,而在SQL中进行批量插入只需要500毫秒),你不得不使用它。你最终会不得不使用ADO.NET进行数据库插入。
    • 相较于对象数据库,关系型数据库有一些优点,即数据独立于调用应用程序(然而,这也是一个弱点,因为映射层使一切变得更慢、更复杂和更脆弱)。
    • 底线:花了6周时间学习了LINQ-to-Entity ORM框架和Microsoft SQL Server 2008 R2。学习曲线相对陡峭。
  • 对象数据库:尝试过对象数据库,即免费、开源的db4o
    • 发现只需一行代码即可持久化对象。
    • 无需处理模式更改,它只是工作。
    • POCO(Plain Old Class Objects)具有即时支持。在代码中创建类,然后将其持久化。使用Entity框架也可以做到这一点,但需要手动映射,而且很容易出错。
    • 打开透明持久性,并在后台自动进行延迟加载——不再需要检查由于Entity框架中的延迟加载而未加载的对象。
    • 对象数据库的性能也令人印象深刻:如果你在对象数据库中有1000万行数据并启用索引,则对三列进行选择只需16毫秒。这是相当不错的。
    • 底线:经过1周的学习,我得到了与使用RDBMS进行持久化相同的解决方案,但它更加清晰、代码更少、更易维护。如果我真的想要,我还可以使用服务将db4o数据库与MSSQL同步。
对于企业级系统,例如一张拥有2.5亿行的表格,性能方面的问题,如分片聚簇索引非聚簇索引等选项变得尤为重要。在这种情况下,db4o将无法胜任,可能需要更加专业的解决方案。然而,如果你只需要一个简单易用的对象持久化方法,那么对象数据库就可以满足需求。学习SQL、设置ORM映射、安装MSSQL、实现自己的批量加载程序等所有工作都会消失不见,留给你的是干净、优雅且100%托管的代码。
我猜想厂商们没有采用对象数据库的原因之一是数据库市场价值每年高达30亿美元,目前还没有理由去削弱这个摇钱树。
免责声明:我与Microsoftdb4o均无任何关联。

2

克里斯·戴特(Chris Date)同意:

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

《SQL与关系理论:如何编写准确的SQL代码》第36页


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接