亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Hibernate OGM的SQL與NoSQL數(shù)據(jù)庫的統(tǒng)一訪問模型的設計與實現(xiàn)

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

        李東奎,鄂海紅

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

        基于Hibernate OGM的SQL與NoSQL數(shù)據(jù)庫的統(tǒng)一訪問模型的設計與實現(xiàn)

        李東奎,鄂海紅

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

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

        HBase;MySQL;數(shù)據(jù)庫

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

        0 引言

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

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

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

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

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

        1 基于HibernateOGM的SQL和NoSQL的統(tǒng)一訪問模型的設計

        1.1 HibernateOGM介紹

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

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

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

        1.2 JAVA注解

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

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

        1.3 模型架構

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

        1.3.1 mode parser

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

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

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

        1.3.2 HBase mode

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

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

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

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

        1.3.3 MySQL mode

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

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

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

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

        2 模型實現(xiàn)

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

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

        2.1 mode parser模塊的實現(xiàn)

        框架可以動態(tài)識別傳遞來的BEAN所屬的數(shù)據(jù)

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

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

        2.2 HBase mode模塊的實現(xiàn)

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

        2.2.1 Delete handler模塊的實現(xiàn)

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

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

        2.2.2 Insert handler模塊的實現(xiàn)

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

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

        2.2.3 Read handler模塊的實現(xiàn)

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

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

        2.3 MySQL mode模塊的實現(xiàn)

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

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

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

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

        3 結論

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

        致謝(可選)

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

        [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存儲研究。

        鄂海紅,副教授,主要研究方向:大數(shù)據(jù)及個性化推薦系統(tǒng)。

        猜你喜歡
        數(shù)據(jù)庫模型
        一半模型
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權M-估計的漸近分布
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        3D打印中的模型分割與打包
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        數(shù)據(jù)庫
        財經(jīng)(2016年6期)2016-02-24 07:41:51
        FLUKA幾何模型到CAD幾何模型轉換方法初步研究
        国产三级不卡一区不卡二区在线| 午夜a福利| 厕所极品偷拍一区二区三区视频 | 少妇被粗大的猛进出69影院| 亚洲av综合色区无码一二三区 | 国产综合精品久久久久成人| 国产影片免费一级内射| 一本大道av伊人久久综合| 国产精品久久一区二区三区| 国产精品亚洲片夜色在线| 加勒比一区二区三区av| 激情内射人妻1区2区3区| 久久亚洲私人国产精品| 免青青草免费观看视频在线| 久久狼人国产综合精品| 亚洲av一二三区成人影片| 日本三级欧美三级人妇视频| 亚洲成av人无码免费观看| 久久中文字幕亚洲综合| 亚洲av无码一区二区三区天堂古代| 最近高清中文在线字幕观看| 中文字幕乱码亚洲无线| 国产精品国产三级国产av18| 亚洲av无码久久精品狠狠爱浪潮| a观看v视频网站入口免费| 免费看黄在线永久观看| 免费a级毛片18禁网站免费| 欧美日韩国产一区二区三区不卡| 久久久久一| 国产一区二区在线免费视频观看| 久久久免费精品re6| 欧美日本亚洲国产一区二区| 成av人片一区二区三区久久| 精品人妻少妇av中文字幕| 成全高清在线播放电视剧| 日韩国产精品一本一区馆/在线| 日韩在线不卡一区三区av| 337p日本欧洲亚洲大胆精品| 91在线在线啪永久地址| 精品国产三级国产av| 蜜臀av在线观看|