999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Hibernate OGM的SQL與NoSQL數據庫的統一訪問模型的設計與實現

2016-12-15 02:47:06李東奎鄂海紅
軟件 2016年11期
關鍵詞:數據庫模型

李東奎,鄂海紅

(北京郵電大學,北京 海淀 100876)

基于Hibernate OGM的SQL與NoSQL數據庫的統一訪問模型的設計與實現

李東奎,鄂海紅

(北京郵電大學,北京 海淀 100876)

針對將現有的關系型數據庫和非關系型數據庫都有自己的專用API的應用場景,借助于開源框架Hibernate OG建立了一個統一的存儲SQL數據庫和非NoSQL數據庫的框架,使其對這兩種數據庫的讀寫能在一個框架下按照統一的規則進行,無需進行額外的API查看。通過使用JAVA的注解區別數據庫類型、JAVA對象填充數據、Hibernate OGM框架自動將JAVA對象解析成點分格式、底層通過原生API封裝寫入數據庫的引擎。針對混合使用HBase和MySQL的場景,對以上統一訪問模型進行了實驗和驗證。實驗表明,通過JAVA注解區分數據庫類型,通過JAVA對象填充數據,通過Hibernate OGM統一解析數據存儲數據的這一系列的操作來進行對SQL和NoSQL數據庫的方案是可行的。

HBase;MySQL;數據庫

本文著錄格式:李東奎,鄂海紅. 基于Hibernate OGM的SQL與NoSQL數據庫的統一訪問模型的設計與實現[J].軟件,2016,37(11):14-18

0 引言

伴隨著如今互聯網行業的高速發展,各種數據格式層出不窮,從而產生了能適應各種不同類型數據的數據庫。由于最開始的數據較為簡單且有一定規律可循,所以從誕生了最開始的關系型數據庫,比如MySQL、PostgreSQL和SQLServer仍然被廣泛使用。隨著互聯網浪潮的繼續推進和大數據時代的到來,要處理的數據不再是簡單的扁平數據了,而是大量如Key-Value型、JSON型、XML型等新的數據類型,從而產生了HBase、MongoDB、Redis等類型的數據庫來適應新的數據類型[1]。NoSQL數

據庫不同于傳統的數據庫的重要區別,就是面向文檔、圖形、鍵值對、對象等存儲方式,更適合存儲某些特定類型的數據[2],其使用也成為一種潮流和趨勢。因此在本文中,提到的NoSQL[3]數據即為非關系型數據庫,提到的SQL數據庫即為關系型數據庫。

雖然現有的NoSQL數據庫經過了十幾年的發展,已經擁有了初步的使用規模,表現良好,但是SQL數據庫經歷了數十年的研究和性能優化,很多數據都可以使用SQL數據庫進行很好的建模,所以關系型數據庫不能完全被相對不成熟的NoSQL數據庫替代和舍棄[4]。而對于實際使用的數據需要存入數據庫時,需要判斷其適合使用SQL數據庫還是NoSQL數據庫,然后使用不同的API訪問,需要花費大量的時間去調研研究各種不同數據庫的API使用,尤其是現在NoSQL數據庫和SQL數據庫的編程模型差異性非常大,增加了編程難度,降低了開發速度。

SQL數據和NoSQL數據庫的訪問沒有統一的訪問模型。而使用原生的數據庫訪問API將增加應用的復雜性并降低開發效率和可維護性。為了克服上述缺點,有必要提出一種解決方案,允許開發人員無論對于SQL型數據庫還是NoSQL數據庫使用統一的編程模型進行數據庫的訪問,不需要了解底層數據庫的編程細節,這既具有理論意義,又具有使用價值。

本文提出的關系型數據庫與非關系型數據庫的統一訪問模型旨在為SQL和NoSQL存儲提供統一的編程訪問模型,在HBase[5]和MySQL的數據庫之間架起一座橋梁屏蔽底層的數據庫的編程模型的差異,即為開發人員提供一個屏蔽底層的分離的數據源的訪問解決方案。

1 基于HibernateOGM的SQL和NoSQL的統一訪問模型的設計

1.1 HibernateOGM介紹

Hibernate Object/Grid Mapper(OGM)[6]這個項目能夠為NoSQL數據庫提供Java Persistence(JPA)支持。它復用了Hibernate Core引擎將實體持久化至NoSQL數據存儲中,而不是關系型數據庫中。它還復用了Java Persistence Query Language(JP-QL)來搜索數據。

通過重寫Datastore provider和GridDialect,使得Hibernate OGM擁有訪問HBase的能力,實現的原理如下,將非結構化壓縮成結構化的數據。在Hiberante OGM框架中,Datastore provider扮演了數據提供者的角色,任何SQL或者NoSQL數據庫,都可以通過重寫Datastore provider來定制自己的數據庫訪問方式,因此,可以通過改寫Datastore provider來定制框架,使框架擁有訪問HBase的能力。

圖1 Hibernate OGM架構圖Fig.1 HibernateOGM Structure

1.2 JAVA注解

Annotation(注解)是JDK1.5及以后版本引入的。它可以用于創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。注解是以‘@注解名’在代碼中存在的,根據注解參數的個數,我們可以將注解分為:標記注解、單值注解、完整注解三類。它們都不會直接影響到程序的語義,只是作為注解(標識)存在,我們可以通過反射機制編程實現對這些元數據(用來描述數據的數據)的訪問。另外,你可以在編譯時選擇代碼里的注解是否只存在于源代碼級,或者它也能在class文件、或者運行時中出現(SOURCE/CLASS/RUNTIME)。

通過為類添加注解,可以在程序運行時查看某一個對象的注解對應哪個數據庫,從而實現了程序自動建立對象和數據庫之間的聯系。

1.3 模型架構

此部分,介紹模型的架構和架構的中間件的功能。本架構中包含如下中間件:模型解析器、數據源分離策略的HBase模型處理器、數據源分離策略的MySQL模型處理器。模型架構如下圖2所示。

1.3.1 mode parser

此部分為模型架構的模型解析器,當架構存儲

數據時,會傳遞JAVA BEAN給mode parser模塊,此模塊判斷運行時判斷JAVA BEAN的注解信息,根據注解信息即可判斷此JAVA BEAN中包含的數據將要被傳送到哪個數據庫,然后將此JAVA BEAN傳遞到相應的MO DE。此模塊是整個數據訪問流的中轉模塊。當讀取數據時,此模塊負責將數據與相應的JAVA BEAN做轉換。

圖2 模型架構圖Fig.2 Mode Structure

1.3.2 HBase mode

此模塊用于模型框架對于HBase的讀取和寫入操作,對于原生的HBase的API做了一次封裝,使得框架上層傳送的數據能夠訪問HBase數據庫。

Insert handler:此模塊用于執行框架數據插入HBase數據,根據框架上層傳送的JAVA BEAN,此模塊可以解析出將要插入的數據庫表的名稱,然后根據相應的插入邏輯,執行底層的實際的插入HBase數據的操作。

Delete handler:此模塊用于執行框架數據刪除HBase的數據,根據框架上層傳送的JAVA BEAN,從模塊可以解析出將要刪除的數據的表的名稱、ROWKEY,然后根據相應的刪除邏輯,執行底層的實際的刪除HBase數據的操作。

Read Handler:此模塊用于執行框架數據的讀取查詢HBase的數據,根據框架上層傳送的JAVA BEAN,從模塊可以解析出將要讀取的數據的表的名稱、ROWKEY,然后根據相應的讀取邏輯,執行底層的實際的讀取數據的操作。

1.3.3 MySQL mode

此模塊用于模型框架對于MySQL的讀取和寫入操作,對于原生的MySQL的API做了一次封裝,使得框架上層傳送的數據能夠訪問HBase數據庫。

Insert handler:此模塊用于執行框架數據插入HBase數據。根據傳遞的信息,解析出數據庫名稱,執行MYSQL數據庫的插入。

Delete handler:此模塊用于執行框架數據插入HBase數據。根據傳遞的信息,解析出數據庫和PRIMARY KEY,執行MYSQL數據庫的刪除。

Read Handler:此模塊用于執行框架數據的讀取查詢HBase的數據,根據傳遞的信息,從模塊可以解析出將要讀取的數據的表的名稱、PRIMARY,KEY,然后根據相應的讀取邏輯,執行底層的實際的讀取數據的操作。

2 模型實現

此模塊主要介紹次模型框架的實現思路和原理。中間件的實現是通過使用Java語言,HBase API和JDBC API來創建平臺類。中間件層的所有接口都封裝在Platform Class中。在加載過程中,Platform Class首先讀取記錄HBase和MySQL信息的配置文件,來實現和HBase、MySQL數據通信來驗證配置信息中的數據庫信息。其次,調用配置模塊進行存儲平臺的配置,主要包括HBase的初始化,創建作為Platform類的靜態變量的MySQL連接池,映射關系用于完成HBase和MySQL的數據關聯。然后,用戶程序可以通過調用由搜索模塊,讀取模塊,寫入模塊和刪除模塊提供的接口來操作數據。這些接口遵循數據關聯模塊中定義的規則,確保HBase和MySQL中的數據關聯。框架的加載到運行流程圖如下圖3所示:

圖3 模型加載流程Fig.3 Mode load process

2.1 mode parser模塊的實現

框架可以動態識別傳遞來的BEAN所屬的數據

庫,原理是使用了JAVA annotation,通過動態解析,可以減少框架的配置量,實現過程如下圖4所示:

圖4 mode parser流程Fig.4 mode parser process

2.2 HBase mode模塊的實現

此模塊重寫了Datastore provider和GridDialect,使得Hibernate OGM擁有訪問HBase的能力,實現的原理如下,將非結構化壓縮成結構化的數據。在Hiberante OGM框架中,Datastore provider扮演了數據提供者的角色,任何SQL或者NoSQL數據庫,都可以通過重寫Datastore provider來定制自己的數據庫訪問方式,因此,可以通過改寫Datastore provider來定制框架,使框架擁有訪問HBase的能力。對數據庫的操作主要是CURD操作,GridDialect作為一個JAVA基類,通過繼承并拓展重寫,可以派生出對某一個特定數據庫的CURD操作,重寫GridDialect某一個函數就是拓展改寫訪問數據庫的一種功能,在GridDialect類中定義了豐富的可被改寫的可繼承的函數,通過這些函數完成了拓展改寫數據庫CURD的能力。總之,通過Datastore provider和 GridDialect完了對某一特定數據庫,特定數據庫的操作的編程。

2.2.1 Delete handler模塊的實現

這個接口的輸入是一個JAVA BEAN,輸出是成功還是失敗。接口遵循數據關聯模塊規則:HBase的表名對應于JAVA BEAN的對象名,HBase的列族名對應于JAVA BEAN中的內嵌對象的名字,HBase列族里的KEY名稱對應于JAVA BEAN內嵌對象的成員名;MySQL表明對應于JAVA BEAN對象名,列名對應BEAN中的成員變量名。因此刪除一行數據,需要ROWKEY和表名。刪除流程如下圖5所示:

圖5 Delete handler流程Fig.5 delete handler process

2.2.2 Insert handler模塊的實現

這個接口的輸入是一個JAVA BEAN,輸出是成功還是失敗。接口遵循數據關聯模塊規則:HBase的表名對應于JAVA BEAN的對象名,HBase的列族名對應于JAVA BEAN中的內嵌對象的名字,HBase列族里的KEY名稱對應于JAVA BEAN內嵌對象的成員名;MySQL表明對應于JAVA BEAN對象名,列名對應BEAN中的成員變量名。默認情況下,HBase和MySQL存儲相同的數據模式。插入模塊運行時流程如下圖6所示:

圖6 Insert handler流程Fig.6 Insert handler process

2.2.3 Read handler模塊的實現

存儲平臺的讀模塊負責從HBase讀取數據。 它包括讀取HBase表的所有數據,讀取HBase表的行數據的接口和讀取對應于HBase表的MySQL表的所有記錄的接口。讀取模塊運行時流程如下圖7所示:

圖7 Read handler流程Fig.7 read handler process

2.3 MySQL mode模塊的實現

MySQLMode的實現,與HBase mode的實現大同小異。MySQL的數據格式固定,所以數據被HibernateOGM轉換后是標準的“表名.列名”的格式,分割后可以解析出表名和列名,然后交由需要的處理邏輯進行處理。

Insert handler:此模塊用于執行框架數據插入HBase數據。根據傳遞的信息,解析出數據庫名稱,執行MYSQL數據庫的插入。

Delete handler:此模塊用于執行框架數據插入HBase數據。根據傳遞的信息,解析出數據庫和PRIMARY KEY,執行MYSQL數據庫的刪除。

Read Handler:此模塊用于執行框架數據的讀取查詢HBase的數據,根據傳遞的信息,從模塊可以解析出將要讀取的數據的表的名稱、PRIMARY,KEY,然后根據相應的讀取邏輯,執行底層的實際的讀取數據的操作。

3 結論

本文闡釋了基于HibernateOGM框架的SQL和NoSQL統一訪問架構的設計與實現,該訪問模型理論上適用于任一種SQL數據庫和NoSQL數據庫,并選定HBase和MySQL對框架進行了完整實現,通過框架提出的mode parser,實現了統一訪問中的NoSQL數據和MySQL中的SQL數據。簡化了編程模式,開發人員只需專注于數據的格式定義,并給出相應的BEAN并在BEAN標明注解即可,提高了開發效率和可維護性。但面對海量數據的查詢,該查詢模型的查詢效率還需 進一步改進和優化。總的來說,該統一查詢模型出的理論框架是可行的,達到了預期的效果。

致謝(可選)

感謝我的指導老師鄂海紅老師的全心指導,用心關懷。鄂海紅老師積極勤奮,性格開朗,思維嚴謹,工作認真負責,在學術上出類拔萃。鄂海紅老師在日常生活和學習中給我無微不至的照顧,并且從畢業論文的開題到最終答辯,一直給我悉心指導,提出寶貴的意見。鄂海紅老師認真負責的態度、積極勤奮的品格,都將成為我以后人生路上學習的榜樣。感謝所有本文參考文獻的作者們,你們的研究給了我很多啟發,對本文的研究有莫大的幫助。

[1] Stonebraker M. SQL databases v. NoSQL databases. Communications of the ACM, 2010, 53(4): 10-11.

[2] Rick Cattell. Scalable SQL and NoSQL Data Stores.ACM Special Interest Group on Management of Data. New York, 2010: 12-27.

[3] Stonebraker M. New sql: An alternative to nosql and old sql for new oltp apps. 2011.

[4] Brynko B. NuoDB: Reinventing the Database. Information Today, 2012, 29(9): 9-9.

[5] Hbase 0.95-SNAPSHOT Reference. http://hbase.apache.org/ xref/index.html.

[6] http://hibernate.org/ogm/

Design and Implementation of Relation Database and Non-Relation Database Unified Access Model Based on HibernateOGM

LIU Dong-kui E Hai-hong
(2. School of Computer Science, Beijing University of Posts and Telecommunications, Beijing 100876, China)

For the existing relational database and non-relational database has its own application-specific API scenarios, with the help of open-source framework Hibernate OG to establish a unified storage SQL database and non-NoSQL database framework, so that both of them Database read and write in a framework in accordance with the unified rules, without additional API view. Through the use of JAVA annotation distinction between the database type, JAVA object to fill data, Hibernate OGM framework automatically JAVA object analysis into point format, the underlying API package written by the original database engine. For the mixed use of HBase and MySQL scenarios, the above uniform access model for the experiment and validation. Experiments show that it is feasible to distinguish database types by JAVA annotation, populate data with JAVA objects, and unify database data storage through Hibernate OGM to implement SQL and NoSQL database.

HBase; MySQL; Database

TP311.13

A

10.3969/j.issn.1003-6970.2016.11.004

國家科技支撐計劃(2014BAK15B01)。

李東奎(1992-),男,碩士研究生,HBase存儲研究。

鄂海紅,副教授,主要研究方向:大數據及個性化推薦系統。

猜你喜歡
數據庫模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
3D打印中的模型分割與打包
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
FLUKA幾何模型到CAD幾何模型轉換方法初步研究
主站蜘蛛池模板: 福利在线免费视频| 日韩第八页| 天堂成人av| 激情无码视频在线看| 久久人搡人人玩人妻精品| 亚洲午夜18| 亚洲精品男人天堂| 欧美成人怡春院在线激情| 高清国产在线| Aⅴ无码专区在线观看| 一本大道无码日韩精品影视| 精品亚洲麻豆1区2区3区| 亚洲成人免费在线| 黄色成年视频| 青草91视频免费观看| 亚洲一级毛片在线观| 国产在线视频欧美亚综合| 最新国产精品第1页| 亚洲国产成人久久精品软件| 欧洲精品视频在线观看| 无码又爽又刺激的高潮视频| 亚洲日韩精品无码专区| 久久香蕉国产线看观| 欧美人与牲动交a欧美精品| 亚洲大尺码专区影院| 久久精品66| 伊人久综合| 666精品国产精品亚洲| 国产精品v欧美| 免费在线不卡视频| 福利在线不卡| 东京热高清无码精品| 四虎影视库国产精品一区| 国产男女XX00免费观看| 亚洲国产日韩视频观看| 亚洲一区二区在线无码| 国产精品污视频| 亚洲欧美天堂网| 人妻91无码色偷偷色噜噜噜| 精品国产一区91在线| 精品国产成人国产在线| 精品久久国产综合精麻豆| 亚洲首页国产精品丝袜| 18禁不卡免费网站| 国产成人成人一区二区| 91福利免费| 丰满少妇αⅴ无码区| 亚洲欧美综合另类图片小说区| 免费在线一区| 亚洲AV无码乱码在线观看代蜜桃 | 综合天天色| 四虎影视8848永久精品| 国产乱视频网站| 国产SUV精品一区二区6| 亚洲AV无码一二区三区在线播放| 国产成人一区| 久久婷婷色综合老司机| 国产尤物视频在线| 亚洲综合激情另类专区| 成人在线观看一区| 日韩AV无码一区| 国产精品熟女亚洲AV麻豆| 婷婷六月综合网| 欧美成人综合在线| 国产一区二区三区免费| 久久夜色撩人精品国产| 久久国产高清视频| 一级毛片免费不卡在线 | 五月激情综合网| 国产成人综合久久| 999在线免费视频| 一本一道波多野结衣一区二区 | 91福利免费| 亚洲欧美日韩成人在线| 九九热这里只有国产精品| 制服丝袜在线视频香蕉| 日韩久久精品无码aV| 中文字幕 欧美日韩| 91蝌蚪视频在线观看| 免费A级毛片无码免费视频| 国产精品视频久| 美女毛片在线|