在数据库使用方面,过去的十年是ORM的时代,数百个ORM竞相使用传统的关系型数据库管理系统来持久化我们的对象图。现在,我们似乎正在见证面向文档的数据库的成熟。这些数据库高度优化了无模式文档,但也非常有吸引力,因为它们能够扩展并查询并行集群。
对于面向对象设计中数据模型的持久化,文档导向数据库还具有一些优势。由于表是无模式的,可以将属于不同类别的对象存储在继承层次结构中。此外,随着领域模型的变化,只要代码能够处理从旧版本的领域类中获取对象,就可以避免每次更改都要迁移整个数据库的情况。
另一方面,文档导向数据库的性能优势似乎主要体现在存储更深层次的文档时。用面向对象的术语来说,这些类由其他类组成,例如博客文章及其评论。然而,在我能想到的大多数示例中,例如博客,读取访问的增益似乎被每次添加新评论时必须写整个博客文章“文档”的惩罚所抵消。
在我的看法中,如果极度注意以针对数据的读写方式进行优化的深图形式组织对象,则文档导向数据库可以为面向对象系统带来显著的好处,但这意味着需要事先了解用例。在实际情况下,我们通常直到有实际的实现可供分析才知道。
那么关系型与文档导向数据库的情况是否是一个摇摆不定的问题呢?我对人们的观点和建议感兴趣,特别是如果有人在文档导向数据库上构建了任何重要应用程序。
对于面向对象设计中数据模型的持久化,文档导向数据库还具有一些优势。由于表是无模式的,可以将属于不同类别的对象存储在继承层次结构中。此外,随着领域模型的变化,只要代码能够处理从旧版本的领域类中获取对象,就可以避免每次更改都要迁移整个数据库的情况。
另一方面,文档导向数据库的性能优势似乎主要体现在存储更深层次的文档时。用面向对象的术语来说,这些类由其他类组成,例如博客文章及其评论。然而,在我能想到的大多数示例中,例如博客,读取访问的增益似乎被每次添加新评论时必须写整个博客文章“文档”的惩罚所抵消。
在我的看法中,如果极度注意以针对数据的读写方式进行优化的深图形式组织对象,则文档导向数据库可以为面向对象系统带来显著的好处,但这意味着需要事先了解用例。在实际情况下,我们通常直到有实际的实现可供分析才知道。
那么关系型与文档导向数据库的情况是否是一个摇摆不定的问题呢?我对人们的观点和建议感兴趣,特别是如果有人在文档导向数据库上构建了任何重要应用程序。