一種大數據訪問和管理的中間件定制系統與方法
【技術領域】
[0001]本發明涉及一種大數據訪問和管理的中間件定制系統與方法。
【背景技術】
[0002]傳統模式下,應用程序通常使用JDBC直接連接各個關系型數據庫,獲取所需要的數據,使用SQL語句直接對數據庫中的表進行增刪改查操作,如MySQL、OracIe等,但是需要知道關系型數據庫的物理結構。JDBC可以屏蔽關系數據庫之間的區別,使用統一的方式連接不同的關系型數據庫,但是不能連接非關系型數據庫,但是網站每天產生的數據量是巨大的,對于關系型數據庫來說,在一張包含海量數據的表中查詢,效率是非常低的,而且SQL語言是一種非過程化的面向集合的語言,它雖然用起來非常簡單,但由于是解釋實現,效率不如人意。
[0003]大數據訪問中間件的定制需求,具有以下特點:首先,一個網站可能有成千上萬的用戶每天需要存儲大量數據,只存儲到關系型數據庫中,可能導致數據存取速率降低,網站訪問速度受影響,這就要求需要將低價值密度、海量的數據存儲到非關系型數據庫中。其次,開發人員并不想要了解底層數據庫具體的物理結構,而是面向對象的訪問數據,想要透明的訪問底層數據庫,就像數據庫不存在一樣。再次,需要有統一的語言操作關系型數據庫和非關系型數據庫,如果每種數據庫使用一種語言容易混淆。最后,使用JDBC只能連接關系型數據庫,關系型數據庫對于海量數據的查詢和存儲效率比較低,所以需要一種中間件實現對關系型數據庫和非關系型數據庫的統一訪問,并有選擇的存儲海量數據。
【發明內容】
[0004]本發明為了解決上述問題,提出了一種大數據訪問和管理的中間件定制系統與方法,本系統克服了傳統JDBC只能連接關系型數據庫的缺陷,可以把非結構化的、低價值密度的、大量的數據存儲在非關系型數據庫中,把結構化的、高價值密度、少量的數據存儲在關系型數據庫,提高數據的查詢和存取效率。
[0005]為了實現上述目的,本發明采用如下技術方案:
[0006]—種大數據訪問和管理的中間件定制系統,包括JPQL語句轉換模塊、總體持久化模塊和子持久化單元;其中:
[0007]所述JPQL語句轉換模塊,用于負責對提交的JPQL語句進行轉化,以使得將JPQL語句轉化成既適應于關系型數據庫又適應于非關系型數據庫的字符串形式;
[0008]所述總體持久化模塊,該模塊封裝了多個子持久化單元,用于將關系型數據庫和非關系型數據庫分別進行了封裝,屏蔽了關系型數據庫和非關系型數據庫之間的區別;
[0009]所述子持久化單元,用于定義實體,對實體進行管理,并且提供相應的數據庫連接,將對實體的操作映射成對應的數據操作;定義多個子持久化單元,每個子持久化單元對應一種類型的數據庫。
[0010]所述子持久化單元內容至少包括:
[0011]—個獨立的子項目,該項目使用一個xml文件連接具體的數據庫,還包括對應數據庫中的實體,一個子項目只能連接一個具體的數據庫,該項目中包含具體的數據庫驅動以及相應的java持久化單元驅動;
[0012]對應數據庫中定義的實體,每個實體都有對應的實體定義,這里的實體是指數據庫管理系統中的不同管理對象,再通過映射機制將實體映射成具體數據庫中的數據,每個實體對應數據庫中的一個表,關系型和非關系型數據庫中實體映射都采用注解的方式;
[0013]對應的配置文件,配置文件采用xml的格式,配置文件中用標識屬性來標識自己的身份是子單元,每個子單元都有一個唯一的配置文件,并且配置文件的標識名稱必須唯一,不能重復,每個配置文件連接一個數據庫,并調用相應的實體。
[0014]基于上述系統的工作方法,包括以下步驟:
[0015](I)提交JPQL語言操作實體對象請求,以面向對象的方式訪問數據;
[0016](2)分析提交的JPQL語句,將其轉化成既適應于關系型數據庫又適應非關系型數據庫的字符串形式來操作結果集;
[0017](3)通過Spring配置文件調用總體持久化單元、定義實體管理工廠、定義實體管理器和定義事務管理器來獲得結果集;
[0018](4)總體持久化單元調用多個子持久化單元,將多個子持久化單元組合成一個,定義總體持久化單元屬性;
[0019](5)多個子持久化單元分別調用定義的實體對象類,并分別連接關系型數據庫和非關系型數據庫;
[0020](6) JPQL語句轉化后的字符串操作實體對象,實體映射后的數據分別存儲到關系型數據庫和非關系型數據庫。
[0021]所述步驟(I)中,開發人員提交JPQL語句請求,JPQL是面向對象的查詢語言,在關系型數據庫(MySQL)中測試了 JPQL所有的查詢語句,關系型數據庫完全支持JPQl的所有查詢語句,但是當使用非關系型數據庫(MongoDB)測試JPQL的所有查詢語句時,非關系型數據庫并不能完全支持直接使用JPQL語句。
[0022]所述步驟⑵中,由于非關系型數據庫不能完全支持直接使用JPQL語句,將JPQL轉化成非關系型數據庫和關系型數據庫都支持的字符串形式,MongoDB不支持JPQL中的參數格式,將JPQL中的參數用字符串變量表示出來,然后再對總持久化單元層獲得的實體對象進行操作。
[0023]所述步驟(3)中,使用基于Spring架構的Web系統的應用系統,同時使用關系型數據庫和非關系型數據庫,在Spring架構的配置文件中調用定義的總體持久化單元,并定義實體管理工廠對獲得的實體進行管理,還定義事務管理器管理事務。
[0024]所述步驟(4)中,總體持久化單元中調用多個不同的子持久化單元,并將多個子持久化單元組合成一個,所以Spring層只需要調用這個總的持久化單元即可實現對多個數據庫的透明訪問。
[0025]所述步驟(5)中,每個子持久化單元負責連接一個數據庫,包括關系型數據庫和非關系型數據庫,并引用已經定義好的實體類,每個實體類是相應數據庫表的映射,關系型數據庫中的數據映射的實體類和非關系型數據庫映射的實體類是不同的,各個子持久化單元名稱是不同的。
[0026]所述步驟(5)中,每個子持久化單元和它對應的實體放在同一個項目中,并將各個項目打成jar包的形式,供總體持久化單元調用,各個子持久化單元和實體對于上層的應用程序是透明的。
[0027]所述步驟¢)中,JPQL語句轉化后的既適應于關系型數據庫又適應于非關系型數據庫的字符串,直接操作封裝好的實體類,然后將操作后的實體映射的數據分別存儲到關系新數據庫和非關系型數據庫。
[0028]本發明的工作原理為:提供了一個操作關系型數據庫和非關系型數據庫的統一接口,可以把非結構化的、低價值密度的、大量的數據存儲在非關系型數據庫中,把結構化的、高價值密度、少量的數據存儲在關系型數據庫,提高數據的查詢和存取效率。然后,實現了對關系型數據庫和非關系型數據庫的透明訪問,開發人員不需要了解數據庫中表的具體的物理結構,使用戶可以通過操作實體對象,通過實體對象和數據庫表的映射關系來操作數據。最后,通過測試非關系型數據庫并不完全支持直接使用JPQL查詢語言,通過將JPQL語句轉化成既適應于關系型數據庫又適應于非關系型數據庫的字符串形式解決這個問題。
[0029]本發明的有益效果為:
[0030](I)克服了傳統JDBC只能連接關系型數據庫的缺陷,提供了一個操作關系型數據庫和非關系型數據庫的統一接口,可以把非結構化的、低價值密度的、大量的數據存儲在非關系型數據庫中,把結構化的、高價值密度、少量的數據存儲在關系型數據庫,提高數據的查詢和存取效率;
[0031](2)實現了對關系型數據庫和非關系型數據庫的透明訪問,開發人員不需要了解數據庫中表的具體的物理結構,不需要在程序中編寫連接數據庫的代碼,直接調用配置文件來連接各個數據庫,使開發人員可以通過操作實體對象,通過實體對象和數據庫表的映射關系來操作數據;
[0032](3)通過反復測試發現,非關系型數據庫并不完全支持直接使用JPQL查詢語言,通過將JPQL語句轉化成既適應于關系型數據庫又適應于非關系型數據庫的字符串形式解決這個問題。
【附圖說明】
[0033]圖1為一種大數據訪問中間件的定制系統示意圖;
[0034]圖2為一種大數據訪問中間件的定制方法詳細流程圖。
【具體實施方式】
:
[0035]下面結合附圖與實施例對本發明作進一步說明。
[0036]圖1中,一種大數據訪問中間件的定制方法示意圖,該中間件包括:
[0037]JPQL語句轉換模塊201,負