6

最近,我开始研究 mongo。由于 mongodb 的整个概念是无模式和面向文档的,我如何将关系转换为实体?

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

限制我使用 OGM 的事情:

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

  2. Hibernate 最近(2015 年 1 月)推出了针对 NoSQL 数据库的OGM 。

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

4

2 回答 2

3

编辑:昆德拉不再维护。请使用替代品。


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

对于 NOSQL 数据库,选择 ORM 完全取决于用例。ORM 会将您的表(在 MongoDB 的情况下为 Collection)映射到实体对象。您补充说,您可以在实体中保留一个地图,这将使您的设计变得有点无模式。大多数时候,我们的数据几乎都是结构化的,因此可以使用 ORM。但是,如果您拥有完全通用的非结构化数据,请选择 Java 驱动程序。检查Mongo 的文档

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

PS:

  • 此答案适用于 ORM 与不在 Hibernate ORM 上的本机驱动程序
  • 我是昆德拉开发者
于 2015-11-03T05:21:54.937 回答
0

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

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

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

Ferma 项目最初是作为 TinkerPop2 Frames 项目的替代品而创建的。当时缺乏社区需要的功能,而且它的性能非常缓慢。如今,Ferma 是一个健壮的框架,其作用类似于传统数据库的对象关系模型 (ORM) 库。Ferma 通常被称为对象图模型 (OGM) 库,并将 Java 对象映射到图中的元素,例如顶点或边。简而言之,它允许使用 java 接口和类来定义模式,这些接口和类提供了与底层图交互的抽象级别。

还有 Tinkerpop 项目的描述。

Apache TinkerPop™ 是一个适用于图数据库 (OLTP) 和图分析系统 (OLAP) 的图计算框架。

注意:我是 Ferma 的作者之一。

于 2016-12-29T09:51:36.930 回答