我们已在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以两种方式执行查询
- 使用Hibernate Search来索引您的实体,并直接编写Hibernate Search查询。这个模型的好处是它是Hibernate或JPA API的自然扩展(返回管理实体等)
- 使用底层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。
享受吧