2015-11-03 53 views
3

最近,我开始研究mongo。由于mongodb的整体概念是无模式和面向文档的,我怎样才能将关系转换为实体?我们应该在Java中使用MongoDB的OGM/ORM吗?

我在java中使用hibernate ORM将对象映射到表。是否需要为mongodb做同样的事情?

东西限制我使用OGM:

  1. 一旦Java的实体映射到一个集合中蒙戈,将蒙戈是无架构的概念仍然是有效的。在这种情况下,我必须将成员变量映射到该集合的键。另外,如果一个mongo集合应该包含嵌套对象或一个对象数组,那又如何呢?

  2. 最近Hibernate为NoSQL数据库启动了他们的OGM(2015年1月)。

任何人都可以帮我决定选择OGM的mongo吗?

回答

2

当然,ORM很容易使用,它们中的很多允许我们使用SQL或JPQL以类似RDBMS的方式进行查询,但是ORM有其自身的局限性,是的,它们也会增加一些开销(在性能条款)。这就是为什么使用Native MongoDB Java Driver是首选。

对于NOSQL数据库,选择ORM完全取决于用例。 ORM会将您的表(Collection在MongoDB的情况下)映射到实体对象。您补充说,您可以在实体中保留一张地图,这将使您的设计成为一点点的无模式。大部分时间我们的数据几乎是结构化的,所以可以使用ORM。但是,如果您拥有Java Driver的完全通用和非结构化数据。检查Mongo's documentation

此外,还有其他稳定的ORM工具,如Kundera,Spring Data。你应该探索他们。

PS:

  • 这个答案是对的ORM VS本地驱动程序无法在Hibernate的ORM
  • 我是昆德拉开发商
+0

你知道哪些文档可以指导我通过将数据库从Oracle更改为OGM吗? –

+0

我没有_Oracle到OGM_? OGM意味着Hibernate OGM?到目前为止,你如何访问oracle? –

+0

是的,对不起。我们正在从通过Hibernate ORM访问的Oracle数据库迁移到Mongo数据库。 –

0

我会建议OGM框架像Tinkerpop,或者如果你需要更高一级的水平,并且更类似于Hibernate,然后考虑Ferma。 Ferma位于Tinkerpop之上,并使用注释来定义类似JPA和Hibernate中的实体的Java类。不同之处在于Ferma和Tinkerpop是专门为图形数据库构建的,而不是试图将其填充到为传统关系数据库设计的框架中。

Ferma和Tinkerpop的一个很好的功能是,虽然为图数据库构建,他们仍然在关系数据库上工作。 Tinkerpop有几个驱动程序,可以在市场上几乎所有主要的图形数据库和关系数据库上运行。它也可以使用本地存在于Tinkerpop中的内存驱动程序,因此根本不需要任何数据库支持。它是一个非常灵活的平台,在模块化和灵活的代码方面有很多好处。

这里的参考是对Ferma项目的描述。

该Ferma项目最初创建作为替代 TinkerPop2框架项目。在当时缺乏社区所需的功能,其性能极其缓慢。今天,Ferma 是一个强大的框架,其作用类似于传统数据库的对象关系模型(ORM)库。 Ferma 通常被称为对象图模型(OGM)库,并将Java对象映射到图形中的元素(如Vertex或Edge)。简而言之,它允许使用java接口和 类定义模式,该类提供了与底层图交互的抽象级别。

并且还描述了Tinkerpop项目。

阿帕奇TinkerPop有关™是两个曲线图 数据库(OLTP)和图形分析系统(OLAP)的曲线图计算框架。

注:我是Ferma的作者之一。