【问题标题】:Should we use OGM/ORM like hibernate in java for Mongodb? [closed]我们应该在 java 中为 Mongodb 使用 OGM/ORM 之类的 hibernate 吗? [关闭]
【发布时间】:2015-11-03 04:49:48
【问题描述】:

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

我在 java 中使用 hibernate ORM 将对象映射到表。 mongodb有必要做同样的事情吗?

限制我使用 OGM 的事情:

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

  2. Hibernate 最近(2015 年 1 月)为 NoSQL 数据库推出了 OGM

谁能帮助我决定为 mongo 选择 OGM 吗?

【问题讨论】:

    标签: java mongodb hibernate hibernate-ogm


    【解决方案1】:

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


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

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

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

    PS:

    • 此答案适用于 ORM 与不在 Hibernate ORM 上的本机驱动程序
    • 我是昆德拉开发人员

    【讨论】:

    • 您知道可以指导我将数据库从 Oracle 更改为 OGM 的文档吗?
    • 我没有得到 Oracle 到 OGM? OGM是指休眠OGM吗?您现在如何访问 oracle?
    • 是的,对不起。我们正在从通过 Hibernate ORM 访问的 Oracle 数据库迁移到 Mongo 数据库。
    • 您想要哪个 ORM 的文档?您是否已经为您的用例确定了一种合适的 ORM?
    • 不,我不知道有不同的 ORM 格式可供选择。我想我还有更多的研究要做。谢谢!
    【解决方案2】:

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

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

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

    Ferma 项目最初是作为 TinkerPop2 框架项目。当时缺乏所需的功能 社区,它的表现非常缓慢。今天费尔马 是一个健壮的框架,其作用类似于 用于传统数据库的对象关系模型 (ORM) 库。费尔马 通常被称为对象图模型 (OGM) 库和映射 Java 对象指向图中的元素,例如顶点或边。在 简而言之,它允许使用 java 接口定义模式和 为与 底层图表。

    还有 Tinkerpop 项目的描述。

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

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

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多