面向对象的数据库可以比带有ORM的关系数据库更好吗?

时间:2010-05-20 14:51:36

标签: database orm object-oriented-database

只是认为带有ORM的关系数据库在很多方面与面向对象的数据库非常相似。我的经验完全在于RDMS带有一些ORM,所以在我看来,面向对象的数据库非常相似,但没有我无法肯定的经验。

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

3 个答案:

答案 0 :(得分:5)

  

与RBMS + ORM相比,面向对象数据库有哪些弱点?

最大的缺点是缺乏标准化:没有标准API,没有标准查询语言(OQL尝试是一次大失败),因此缺乏可移植性和可互操作的工具(用于备份,存档,迁移等)。在数据方面你不希望这样。

这解释了IMO为什么OODBMS从采用的角度来看是失败的,以及为什么RDBMS会保持一段时间,无论NoSQL运动如何(我觉得OODBMS供应商认为NoSQL运动是一个机会来在对其产品进行一些品牌重塑之后回来了。)

答案 1 :(得分:3)

我的经历:

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

对于企业界的真正大型系统,包括表格中的2.5亿行,sharding之类的内容以及clustered indexingnon-clustered indexing等选项对性能非常重要。在这种情况下,db4o不起作用,它可能需要更具企业性的东西。但是,如果您是一个简单易用的持久化对象方法,那么对象数据库将适合该法案。学习SQL的所有工作,在ORM中设置映射,处理MSSQL的安装,实现自己的批量加载程序等都会消失,为您留下干净,优雅的100%托管代码。

我怀疑供应商没有接受对象数据库的原因之一是数据库市场每年价值30亿美元,而且没有理由杀死现金牛。

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

答案 2 :(得分:2)

Chris Date同意:

  

...'对象/关系'系统会   只不过是真实的   关系系统......一个合适的   对象/关系系统只是一个   具有适当类型的关系系统   支持...这只是意味着它是一个   适当的关系系统,没有更多和   不能少。

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