MongoDB是面向对象的吗?

Ame*_*mer 19 database mongodb

在MongoDB的网站上,他们写道MonogDB是面向文档的数据库,所以如果MongoDB不是面向对象的数据库,那又是什么呢?文档和面向对象数据库之间有什么区别?

小智 14

这可能有点迟了,但只是认为值得指出,ODB和MongoDB之间存在很大差异.

通常,ODB的焦点是在任意复杂域模型中的对象之间的透明引用(关系),而不必使用和管理像DBRef之类的东西的代码.即使您有几千个类,也不需要担心管理任何键,它们是免费的,当您在运行时创建这些类的1000个实例时,它们将自动在数据库中创建模式.对于像集合集合的自引用对象这样的东西.

此外,您的事务可以跨越这些引用,因此您不必使用完全嵌入的模型.

这些概念是在ORM解决方案中利用的那些,如JPA,托管持久对象生命周期,取自ODB空间,但巨大的区别是ODB中没有映射AT ALL,关系存储为数据库的一部分所以没有运行时JOIN来解决关系,所有关系都以与b-tree查找相同的速度解析.对于那些使用过Hibernate的人来说,想象Hibernate没有任何映射文件,并且因为在幕后没有运行时JOIN,因此速度要快一些.

此外,ODB允许对模型中的任何关系进行查询,因此您不必像MongoDB中那样限制特定集合中的查询.当然,支持散列/ b树/聚合索引,因此在使用它们时查询速度非常快.

您可以在类级别演进ODB中任何类的实例,并在运行时解析正确的类版本.与它在MongoDB中的工作方式完全不同,它维护代码以决定如何处理由于发展无模式数据库而产生的各种形式的blob(或值对象)...或编写代码来访问和更改每个值对象,因为你想要改变架构.

对于分区来说,我认为决定一个可以在仲裁对象之间进行交谈的域模型的分区模型要容易得多,然后就是要弄清楚你的集合包含的所有,最终嵌入策略MongoDB中的文档.作为一个简单的示例,您有一个联系人和一个地址以及一个ShoppingCart,这些在JSON文档中相关,您决定按Contact_id对Contact进行分区.绝对没有什么可以阻止你将这3个类视为对象而不是JSON文档,并将那些与分区一起存储在Contact_id上,就像使用MongoDB一样.但是,如果您有另一个对象帐户并且您希望以非嵌入方式管理这些帐户,因为在帐户上执行了一些聚合计费操作,您可以在ODB中免费获得(不需要为DBRef类型创建代码) ...您可以选择与联系人一起进行分区,或者选择将帐户存储在一个完全独立的物理节点中,但它们将在运行时连接到应用程序空间......就像魔术一样.

如果你想看到一个非常酷的视频,关于如何使用ODB创建一个应用程序,它显示分布,对象移动,容错,性能优化..看到这个(如果你想跳到很酷的部分,跳跃大约21分钟in并且您将避免构建应用程序,只是看看为任何现有应用程序添加分发和容错是多么容易):

http://www.blip.tv/file/3285543


dm.*_*dm. 8

我认为面向文档和面向对象的数据库是完全不同的.这里有相当详细的帖子:

http://blog.10gen.com/post/437029788/json-db-vs-odbms

  • 这是这样的答案的问题。我很好奇,但链接已离线。请在您的答案中包含相关引述。 (2认同)