Hibernate OGM 已不再维护

我们已在Hibernate OGM上保持沉默太长时间。是时候发声了,因为我们有很多东西可以展示。为了庆祝,我们发布了其首个Beta版本。

什么是Hibernate OGM

Hibernate OGM是NoSQL数据存储的Hibernate ORM,它使您能够将对象持久化到本地数据存储中。好处在于Hibernate OGM旨在支持所有的JPA特性(以及Hibernate原生API)

  • 所有映射注解,而不仅仅是部分
  • API
  • 语义(级联等)
  • 以及JP-QL

在NoSQL方面的工作

我们最初以Infinispan作为单一后端开始,并逐步将其抽象化以支持更多

Infinispan

我们在Infinispan上没有止步不前。我们特别通过使用FineGrainedAtomicMap类来存储数据,并从中受益于其增加的可伸缩性。更多内容请参见后面的性能部分。

Ehcache

Ehcache是第一个跳上这辆车的,并提出了一个替代后端实现。感谢Alex Snaps和Greg Luck承担这个赌注并帮助我们改进抽象API。

MongoDB

MongoDB是我们支持的第一个非键值型NoSQL解决方案,我们为此付出了巨大努力,以确保映射与开发者不使用Hibernate OGM时设计的映射相似。例如,标识符映射到_id属性,并且默认情况下关联信息嵌入到实体中。


    {
        "_id" : "owner0001",
        "name": "Emmanuel",
        "twitter": "emmanuelbernard",
        "bankAccounts" : [
            { "bankAccounts_id" : "accountXYZ" }
        ]
    }



您可以使用各种其他映射策略覆盖此设置。

我们还有更多想法要实现以优化Hibernate OGM - MongoDB的集成,我们将与10gen的Jeff Yemin等人合作,确保我们对MongoDB的映射尽可能自然,并确保我们的访问层尽可能高效。

请注意,我们已决定在Hibernate OGM中默认启用MongoDB安全模式,因为我们认为这对Hibernate OGM持久化的模型更有意义,并且我们不想负责杀害小猫。当然,您可以将其关闭。

其他NoSQL引擎

随着我们不断努力集成更多引擎以覆盖NoSQL解决方案的全频谱,支持的NoSQL引擎列表预计将不断增长。如果您想帮忙,请与我们联系!您可以贡献任何正在进行的工作,甚至开始一个全新的项目。这并不难。

性能考虑

我们在性能方面做了很多工作。项目最初是一个实验,但并没有失败(笑);所以这次我们专注于性能优化。

作为副作用,我们也提高了Hibernate ORM的性能——我们重用了相同的核心引擎。我们还与Infinispan团队展开了一场竞争,看看Hibernate OGM和Infinispan在调用堆栈中消耗了最多时间。我们来回尝试了几次,两个项目都大幅减少了开销!

目前,与直接使用底层NoSQL数据存储相比,分析器并没有在Hibernate OGM的堆栈上显示出很大的开销。

查询支持

虽然您在这个版本中可能看不到太多,但我们一直在努力实现JP-QL查询支持。Sanne编写了一个JP-QL查询解析器,它将足够灵活以满足我们的需求。事实上,这也有可能成为Hibernate ORM下一代解析器的基础。

他还着手将JP-QL查询转换为Hibernate Search查询的第一步。这将让您除了NoSQL存储之外,还可以使用Hibernate Search作为内部索引和查询系统。这可以替换或补充NoSQL解决方案的查询功能。

今天,这个解决方案已经可以回答简单的查询了(请确保使用HibernateSessionAPI)。

我们还一直在努力集成Teiid查询引擎,这将是我们迈向不原生支持底层NoSQL引擎的复杂查询的方法。计划是将JP-QL解析器、Teiid查询引擎和为各种NoSQL查询选项编写原生支持结合起来。

我们有一个很棒的计划,但那需要很多话来解释,所以我就留到未来的文章中吧。

同时,您可以使用Hibernate OGM以两种方式执行查询

  1. 使用Hibernate Search来索引您的实体,并直接编写Hibernate Search查询。这个模型的好处是它是Hibernate或JPA API的自然扩展(返回管理实体等)
  2. 使用底层NoSQL存储的本地查询功能。由于Hibernate OGM试图以自然的方式映射数据,因此直接查询NoSQL存储很容易

我们希望很快就能展示JP-QL支持,因为现在基础已经打好了。如果您对我们如何进行查询感兴趣,请与我们联系或阅读我们的参考文档中的架构章节

社区、文档和下载

我们还致力于许多其他工作,如更好的JPA支持、更好的易用性、更少冗余的数据结构等,但这篇文章已经够长了。如果您感兴趣,请查看变更日志

如果没有社区和贡献者的帮助,这个项目将无处可去。特别感谢

  • Guillaume Scheibel,他让MongoDB的支持成为可能
  • Alan Fitton和Oliver Carr对MongoDB关联支持的工作
  • Nicolas Helleringer——他总是在某个地方出现
  • Khanh Maudoux对Cassandra的实验
  • 感谢Davide D'Alto在Neo4J以及其他方面的实验
  • 感谢Seiya Kawashima在Redis和Voldemort周围的实验

如果您有兴趣贡献力量,请联系我们,我们有许多计划和庞大的待办事项清单。

我们(实际上)付出了巨大的努力编写了一本非常好的参考指南,所以请阅读它下载Hibernate OGM

享受吧


回到顶部