有很多关于对象关系映射器以及如何最好地避免阻抗不匹配的信息,如果要使用对象数据库,所有这些似乎都是没有实际意义的问题。我的问题是为什么这个没有更频繁地使用?是因为性能原因还是因为对象数据库导致您的数据成为您的应用程序的专有,或者是由于其他原因?

有帮助吗?

解决方案

  • 熟悉度。 数据库管理员了解关系概念;对象的,不是那么多。
  • 表现。 关系数据库已被证明可以更好地扩展。
  • 到期。 SQL 是一种功能强大、发展已久的语言。
  • 供应商支持。 与 OODBMS 相比,您可以在更多的第一方(SQL 服务器)和第三方(管理接口、映射和其他类型的集成)工具之间进行选择。

自然,面向对象模型是大家更熟悉的。 开发商, ,并且,正如您所指出的,会节省 ORM 之一。但到目前为止,关系模型已被证明是更可行的选择。

另请参阅最近的问题, 面向对象与关系数据库.

其他提示

我一直在使用 数据库4o 这是一个 OODB,它解决了列出的大部分缺点:

  • 熟悉度 - 程序员比 SQL 更了解他们的语言(请参阅本机查询)
  • 性能——这个是非常主观的,但你可以看一下 杆位
  • 供应商支持和成熟度 - 可能会随着时间而变化
  • 不能被不使用相同框架的程序使用 - 有 OODB 标准,您可以使用 不同的框架
  • 版本控制可能有点麻烦——版本控制实际上是 更轻松!

我感兴趣的优点是:

  • 本机查询 - Db4o 允许您用静态类型语言编写查询,因此您不必担心错误输入字符串并在运行时查找丢失的数据,
  • 易于使用 - 在域层、持久层(映射)以及最后的 SQL 数据库中定义业务逻辑肯定违反了 DRY。使用 OODB,您可以定义域所属的位置。

我同意——OODB 还有很长的路要走,但他们正在前进。有些领域问题可以通过 OODB 更好地解决,

对对象数据库的一个反对意见是它在数据和代码之间建立了紧密的耦合。对于某些应用程序来说这可能没问题,但对于其他应用程序则不然。关系数据库为您提供的一件好事是可以对数据添加许多视图。

泰德·纽沃德 解释了这一点以及更多关于 OODBMS 的内容,比这更好。

它与性能无关。也就是说,基本上所有应用程序使用 OODB 都会表现得更好。但这也会让很多 DBA 失业/不得不学习新技术。更多的人将失业去纠正数据中的错误。这不太可能使 OODB 受到老牌公司的欢迎。加文似乎完全无能为力,更好的链接是 柯克

缺点:

  • 无法使用也不使用相同框架访问数据存储的程序使用,从而使整个企业更难使用。

  • 在线可用于非基于SQL的数据库的资源较少

  • 在数据库类型上没有兼容性(如果不更改所有代码,就不能交换其他数据库提供商)

  • 版本控制可能有点bit子。我想在对象中添加新属性并不像在表中添加新列那样容易。

索伦

您所说的所有原因都是有效的,但我认为 OODBMS 的问题在于逻辑数据模型。对象模型(或者更确切地说是 70 年代的网络模型)不像关系模型那么简单,因此较差。

jodonnel,我不明白对象数据库的使用如何将应用程序代码与数据结合起来。如果您设计得当,您仍然可以通过使用存储库模式从 OODB 中抽象您的应用程序,并替换为 ORM 支持的 SQL 数据库。

对于面向对象的应用程序,面向对象的数据库将更自然地适合持久化对象。

可能正确的是,您将数据与域模型联系起来,但这就是关键!

使用以领域为中心的视图以单一方式查看数据、业务规则和流程不是很好吗?

因此,OODB 的一大优点是它符合最现代的企业级面向对象软件应用程序的设计方式,无需额外的工作来使用不同的(关系)设计来设计数据层。构建和维护成本更低,并且在许多情况下通常具有更高的性能。

缺点,我认为普遍缺乏成熟度和采用率......

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