李文杰
(武漢職業技術學院 湖北省武漢市 430000)
從Hibernate OGM(OGM:Object Grid Mapping 縮寫)2011年發布以來,基于這個框架進行關系型和非關系型數據混合使用的案例越來越多,大家對它的認可度也逐步提升。這個框架現在還處于成長階段,隨著時間的推移它的功能逐漸得到進一步完善,開發者也會越來越重視對Hibernate OGM框架的研究和學習。
Hibernate OGM 框架目前仍處于快速成長階段,目前已經能很好的在項目中對接Mongodb、Neo4j、Redis 等非關系型數據。該框架項目的已經完成了初始目標以及部分中級目標,并開始服務于實際開發應用了。它的最終目標是為能兼容對接所有的非關系型數據庫,為開發者提供一個專注業務應用的開發環境。(可以像訪問RDBMS 一樣訪問NoSQL 數據庫),鼓勵"傳統"企業更多的使用新的數據使用模式,并幫助正在使用NoSQL 的應用更容易地擴展到傳統數據庫。
NoSQL 是非關系型的數據庫總稱。目前具有代表性并被實際應用較多的產品有Mongodb、Neo4j、Redis 等。在海量數據讀取、數據分布式存儲、多重數據種類集合、無固定應用模式等需求場景中,這些數據庫已經發揮了巨大作用,越來越多的WEB 應用都需要這種大規模數據做支撐,而這些NoSQL 數據庫提供了無需多余操作就可以橫向擴展的方便,從而使得我們對掌握NoSQL 技術的緊迫性得到了充分的認識。
根據CPA(C:強一致性 A:高可用性 P:分布式容忍性)原則,我們可以將傳統關系型數據庫如Oracle、MySQL、DB2 等劃歸CP類型,強調數據一致性和可用性。然而,現階段大多數WEB 應用不一定需要強一致性,所以大多數網站架構的選擇了犧牲一些強一致性,強調AP,即高可用性和分布式,允許一些數據不一致甚至丟失。而Redis、Mongodb 為了追求高性能數據存儲解決方案,所以選擇了AP,即高可用性及分布式容忍性。綜上所述,目前沒有任何一種數據庫能完美滿足CPA 的全部要求,所以混合方式成為當前大數據應用的主流模式,也就是SQL 數據庫和NoSQL 數據庫一起使用?;谶@些先進理念,Hibernate OGM 框架也因此獲得了良好的應用前景和發展空間。
Hibernate 框架戰略是同時實現ORM 關系型數據庫連接與OGM NoSQL 數據庫連接,如Mongodb、Redis 等。而OGM 的核心是提供將數據存儲到NoSQL 存儲中的JPA 引擎,目標是提供相同的API,相同的語義(級聯,關聯等),相同的查詢語言,支持的高級特性包括:事務、事件通知、高級查詢、分布式處理、offheap 及故障遷移等。Hibernate OGM 框架極好地降低了學習和應用者進入NoSQL 領域的門檻,它很好的隱藏了NoSQL 數據的存儲區,讓開發者的應用程序與數據區進行了很好的分離,讓開發者的關注度重新專注到了應用本身,開發者可以面對不同的NoSQL 數據庫重用相同的編程API,使用相同的對象生命周期語義以及(一定程度上)使用相同的查詢引擎。

圖1
使用Maven 作為構建工具,在從網絡下載項目所需要的框架Hibernate OGM 模塊及其依賴項文件,并用于理嵌入式Neo4j 數據庫;這將引入所有其他必需的模塊,例如Hibernate OGM 內核和Neo4j(一種基于Java 的圖形數據庫)驅動程序。



圖2
非關系型數據庫提供了四種模型:鍵-值存儲庫、大數據表實現、文檔存儲庫、圖形數據庫。在數據模型設計時,我們將面對的不再是一張一張Table 二維數據表,而是一個個領域數據模型。我們可以設計兩個領域模型,兩個模型之間標注出一對多或多對一的關聯,通過創建實體類并用所需的元數據注釋它們來映射域模型。
同時,Hibernate OGM 提供了如模擬序列、UUID 等幾種ID 生成策略,通常我們使用UUID 生成器為模型生成ID,可以確??绮煌琋oSQL 數據存儲的可移植性,并使ID 生成快速且可擴展。此時我們的應用數據屬于SQL 數據庫和NoSQL 數據庫混合使用,如果需要將數據從關系型數據庫移植到NoSQL 中,開發者只需要面對完全相同映射,無需擔心不同的類型數據庫的影響,這就是Hibernate OGM 框架提供的關系數據向非關系型數據之間的簡易遷移功能。
實體定義后需要對persistence.xml 文件進行配置如下:
Neo4j 作為一種圖形數據數據庫,任何數據實體都將映射到相應的節點。保存形式如圖1。
如果使用MongoDB 數據庫那么,數據實體將會以文件形式進行保存。保存形式如圖2。
與Hibernate OGM 框架技術實現理念相近,如Kundera、Apache Gora、等框架技術,在實際應用中也廣泛被采用。
其中Kundera 框架支持對Cassandra、Hbase、MongoDB 等的非關系型數據庫的持久化操作以及關系型數據庫操作。采用的實現方式是將NoSQL 操作轉化為SQL 操作方式,讓程序員專注到Domain Model 設計與開發上,同樣實現了通過修改配置文件在各個數據庫服務器之間進行切換操作。
Apache 基金組織旗下的Gora 框架項目則大力支持Apache HBase、Apache Cassandra 等非關系型數據庫服務器的應用開發,而且更新速度一直很高,現在已經能夠提供0.9 版本的框架源碼了。
作為大數據信息時代,我們需要緊跟軟件技術發展的步伐,對其大數據應用領域的各種技術進行深入的學習和應用。技術在不停發展,Hibernate OGM 也會不停變化。不停的跟蹤學習、測試、應用,就是應用該框架的開發者必須長期堅持的過程。當然,一個框架肯定不能滿足我們所有的應用場景需求,所以我們必須深入了解其優勢和缺陷,結合實際應用進行合理構架。