2. 數據源管理
2.1. 數據庫工具類
基本上每種數據庫都有對應的java開發jar包,為了規范使用和便於分發,我們會對每種數據庫提供的java api進行封裝,封裝后的工具類將作為數據庫管理、數據通道、數據遷移的基礎。
封裝數據庫工具類好處有很多:規范編程人員的開發規范、易於培訓、利於維護調試、便於分發,在開發成本、開發效率和安全性等多個方面可以進行有效控制。壞處就是:在某些地方可能會過度封裝,影響接口的執行效率。不過在多方權衡后,我們仍然認為,在設計這樣一個復雜的數據源管理系統時,進行數據庫工具類的封裝是不得不做的事情。
工具類中的接口按照技術架構分為以下幾種:原生api封裝接口、rmi接口、thrift接口。我們將在第三章節“數據通道管理”中詳細介紹各種技術架構的接口服務。
2.1.1 原生api封裝接口
原生api封裝接口是在各種數據庫官方api接口的基礎上進行的二次輕微封裝,封裝的目的,一是制定開發規范;二是便於接口調用和維護(譬如如果采用原生hadoop api接口,則需要引用幾十個jar文件);三是為其他類型的接口提供設計基礎。原生api封裝接口一般只在設計“多數據源綜合管理系統”時使用,所以在下面各個“工具類”章節中我們將不再詳細介紹原生api封裝接口,如果您有興趣,可以參考數據庫官方提供的api手冊。
2.1.2 rmi接口
rmi接口是我們在各數據庫官方api接口的基礎上設計的針對java語言的接口服務,在設計的過程中,我們添加了以下幾種特性。
第一, 將rmi服務進行邏輯上的分層,三層分別為:通道、服務、接口;基於此種邏輯上的划分,我們為每種數據庫設計了rmi通道模板,通過這些模板,我們可以快速地不編寫任何代碼地構建出rmi通道,並且同一數據源可以有多個rmi通道。通道包括多個服務,服務包括多個接口。並且rmi通道服務的各種配置信息(譬如服務名、路徑、端口號等)以及啟動關閉等操作等均由“多數據源綜合管理系統”配置管理,客戶端只需引用jar包文件即可訪問rmi服務通道。
第二, 具有靈活的授權控制機制。針對通道、服務、接口三個層次,可以在用戶、IP地址兩個層面上進行授權控制。
第三, 接口訪問日志監控機制,系統會記錄下接口調用的詳細信息,包括用戶、客戶端IP、時間、接口名稱等。
第四, 在線用戶監控機制,系統會記錄訪問rmi通道的在線用戶信息。
2.1.3 thrift接口
thrift接口是我們在各數據庫官方api接口的基礎上設計的針對跨語言的接口服務。截止到編寫本文檔時,thrift接口正在設計和測試中,后續將會更新發布。
2.1.4 restful接口
截止到編寫本文檔時,restful接口正在設計和測試中,后續將會更新發布。
下表是我們已經封裝后的數據庫工具類(均包含原生api封裝接口和rmi接口,暫不包括thrift等其他接口)。
名稱 |
描述 |
hnepri-hbase-template-v1.0.jar |
HBase數據庫工具類,包括命名空間管理、表管理、寫數據、讀數據、分頁檢索、過濾器等接口方法。支持非kerberos和kerberos兩種版本。 |
hnepri-hdfs-template-v1.0.jar |
HDFS分布式文件系統工具類,包括目錄文件管理、文件上傳下載、文件權限設置等接口方法。支持非kerberos和kerberos兩種版本。 |
hnepri-neo4j-template-v1.0.jar |
Neo4j圖數據庫工具類,包括圖數據模式管理、節點管理、關系管理、索引管理、路徑管理、Cypher操作等接口方法。 |
hnepri-mongodb-template-v1.0.jar |
MongoDB文檔數據庫工具類,包括數據庫管理、集合管理、文檔管理、用戶管理、索引管理等接口方法。 |
hnepri-hve-template-v1.0.jar |
Hive數據倉庫工具類,包括數據庫管理、表視圖管理、HBasse表映射管理、數據檢索等接口方法。支持非kerberos和kerberos兩種版本。 |
hnepri-bricklayer-common-v2.0.jar |
基礎工具類(包含關系數據庫工具類)。 |
hnepri-redis-template-v1.0.jar |
Redis鍵值數據庫工具類,包括key管理、List管理、Hash管理、Set管理等接口方法。 |
【注】在下面的幾個章節中,我們將陸續穿插講解各個數據庫工具類的設計細節,並在發布的試用系統中分發對應的工具類jar包文件。
2.2.1 功能介紹
當我們決定將某個數據庫接入本系統中時,需要先注冊其數據源信息,其實就是數據庫的連接信息。截止到編寫本文檔時,系統已經允許接入以下8種類型的數據庫,分別為:關系數據庫(Oracle、MySQL等)、HBase、HDFS、Hive、Neo4j、MongoDB、Redis等,其他類型的數據庫正在設計或者測試中。可以為一個數據庫配置多個數據源。功能界面如下所示:
其中, 圖標表示此數據源尚未連接,此時字體顏色為黑色;
圖標表示此數據源已經連接,此時字體顏色為藍色。當點擊
圖標時,將彈出“登錄”窗口,並顯示部分連接選項信息,用戶只需點擊“登錄”即可。當點擊
圖標時,將斷開與數據源的連接,此時所有與此數據源相關的數據訪問操作都將中斷,包括數據訪問、數據遷移、數據通道等,所以一旦數據源啟動,就不能隨隨便便停止或者斷開。
2.2.1.1 注冊數據源
數據源基本信息如下表所示:
屬性 |
描述 |
名稱 |
數據源名稱;一般采用具有實際意義的英文單詞表示。數據源名稱由英文字母、數字、下划線等組合而成,必須具有唯一性,並且建議用具有實際意義的字詞進行命名,譬如“hnepri_test_hbase”,表示公司的測試的HBase集群。【必填項】 |
標題 |
數據源標題;數據源中文標題。 |
種類 |
數據源所屬數據庫種類。 |
驗證登錄 |
此數據庫是否需要登錄驗證。 |
服務器 |
部署服務器信息。 |
數據庫版本 |
數據版本信息。 |
安裝類型 |
數據庫安裝類型信息。 |
啟用狀態 |
此數據庫在系統中是否已經啟用(此屬性暫時未使用到)。 |
備注 |
數據源描述信息。 |
|
新增或者編輯數據源基本信息后,可以配置數據源的連接選項信息,然后就可以進行數據庫連接測試。可以在“數據源配置管理”頁面中點擊圖標連接數據庫,也可以在對應的管理頁面中點擊
圖標連接數據庫。
功能截圖如下所示:
2.2.1.2 刪除數據源
用戶擁有刪除自己創建的數據源的權利,但是無權刪除為其授權分配的可訪問的數據源。數據源刪除之前,需要先刪除刪除連接配置選項信息。刪除數據源后,將同時刪除授權信息、日志信息等。其他的關聯數據,譬如數據通道信息、數據遷移方案信息等,需要手動刪除。
2.2.1.3 登錄/注銷數據源
登錄連接數據源,是基於此數據源進行數據訪問操作的第一步,也是后續數據通道、數據遷移等正常運行的基礎。數據源登錄后,連接對象會一直保存在內存中,只有非常非常微小的概率,會出現連接對象超時中斷、損壞等異常,一般情況下,只需重新登錄即可解決。
注銷斷開數據源,會注銷數據庫連接對象並釋放資源,同時從數據源連接列表中刪除。
2.2.2 數據源分類信息
2.2.2.1 數據源種類
DataBaseCategoryHelper
類型(Type) |
種類(Category) |
名稱 |
關系數據庫 |
Oracle |
|
MySQL |
||
分布式文件系統 |
HDFS |
|
列數據庫 |
HBase |
|
圖形數據庫 |
Neo4j |
|
鍵值數據庫 |
Redis |
|
文檔數據庫 |
MongoDB |
|
CouchDB |
||
對象數據庫 |
db4o |
|
Versant |
||
XML數據庫 |
Berkeley DB XML |
|
BaseX |
||
其他數據庫 |
Cassandra |
|
Voldemort |
||
|
2.2.2.2 數據源類型
DataBaseTypeHelper
代碼 |
名稱 |
Sql |
關系數據庫 |
DFS |
分布式文件系統 |
Column |
列數據庫 |
Graph |
圖形數據庫 |
KeyValue |
鍵值數據庫 |
Document |
文檔數據庫 |
Object |
對象數據庫 |
XML |
XML數據庫 |
Other |
其他數據庫 |
2.2.3 數據源連接選項
下表為數據源的連接選項信息表:
數據源類型 |
連接選項名稱 |
連接選項描述 |
關系數據庫 |
JDBC數據庫連接字符串 |
關系數據庫庫連接字符串,譬如針對Oracle,其連接字符串為“jdbc:oracle:thin:@10.230.4.12:1521:orcl”。 目前支持的關系數據庫包括:ORACLE,MYSQL,SqlServer,DB2,PostgreSQL,Sybase,Informix,Access等8中,其中Oracle和MySQL已經經過測試,其他幾種未完全測試。【必填項】 |
數據庫登錄用戶名稱 |
數據庫登錄用戶名稱。【必填項】 |
|
數據庫登錄用戶密碼 |
數據庫登錄用戶密碼。【必填項】 |
|
HDFS |
coreSite文件名 |
core-site.xml文件,一般將此文件放在classes目錄下,如下圖所示: 【必填項】 |
hdfsSite文件名 |
hdfs-site.xml文件,一般將此文件放在classes目錄下。通過hdfs工具類連接HDFS集群時會根據這兩個屬性讀取xml文件,並初始化Configuration對象。【必填項】 |
|
啟用Kerberos |
hdfs集群是否啟用了kerberos機制。如果啟用了則輸入true,否則輸入false。默認情況下視為未啟用kerberos機制。 |
|
Kerberos用戶名 |
當啟用Kerberos機制時,必須配置Kerberos用戶名。 |
|
Kerberos配置文件 |
當啟用Kerberos機制時,必須配置Kerberos配置文件。文件后綴名為conf,譬如krb5.conf,此文件可以放在本地磁盤的任何目錄中,配置時輸入完整的文件路徑即可。 |
|
Kerberos證書密鑰文件 |
當啟用Kerberos機制時,必須配置Kerberos證書密鑰文件。文件后綴名keytab,譬如ZK00001.keytab,此文件可以放在本地磁盤的任何目錄中,配置時輸入完整的文件路徑即可。 |
|
HBase |
Master主機名/IP地址 |
HBase Master主機名稱,一般不建議用IP地址。【必填項】 |
zookeeper監聽端口號 |
Zookeeper服務的監聽端口號,一般為2181。【必填項】 |
|
zookeeper實例部署地址 |
Zookeeper服務部署主機名稱,一個集群一般至少要有三個zookeeper。主機名稱之間用英文逗號分割。當zookeeper服務主機較少時,可以使用此種方式,如果zookeeper服務主機較多(譬如超過10個等),可以選擇采用下面的“zookeeper實例文件路徑”進行配置。 |
|
zookeeper實例文件路徑 |
當zookeeper服務主機較多時,可以將這些主機名稱按照每行一個的方式組織存儲在文本文件中,然后將此選項配置為文件的完整路徑即可。工具類會自動解析實例文件,並初始化Configuration。謹記:zookeeper實例部署地址和zookeeper實例文件路徑只能二選一。 |
|
coreSite文件名 |
請參考HDFS對應選項。 |
|
hdfsSite文件名 |
請參考HDFS對應選項。 |
|
hbaseSite文件名 |
hbase-site.xml文件,一般將此文件放在classes目錄下。 |
|
啟用Kerberos |
請參考HDFS對應選項。 |
|
Kerberos用戶名 |
請參考HDFS對應選項。 |
|
Kerberos配置文件 |
請參考HDFS對應選項。 |
|
Kerberos證書密鑰文件 |
請參考HDFS對應選項。 |
|
Neo4j |
數據庫服務器IP地址 |
數據庫服務器IP地址。【必填項】 |
數據庫服務器端口號 |
數據庫服務器端口號,默認是7474。【必填項】 |
|
數據庫登錄用戶名稱 |
數據庫登錄用戶名稱。【必填項】 |
|
數據庫登錄用戶密碼 |
數據庫登錄用戶密碼。【必填項】 |
|
MongoDB |
數據庫服務器IP地址 |
數據庫服務器IP地址。【必填項】 |
數據庫服務器端口號 |
數據庫服務器端口號,默認是27017。【必填項】 |
|
數據庫登錄用戶名稱 |
數據庫登錄用戶名稱。【備用選項】 |
|
數據庫登錄用戶密碼 |
數據庫登錄用戶密碼。【備用選項】 |
|
Hive |
JDBC數據庫驅動 |
org.apache.hive.jdbc.HiveDriver【必填項】 |
JDBC數據庫連接字符串 |
jdbc:hive2://10.230.5.2:10000/default?characterEncoding=UTF-8【必填項】 |
|
數據庫登錄用戶名稱 |
數據庫登錄用戶名稱【必填項】 |
|
數據庫登錄用戶密碼 |
數據庫登錄用戶密碼【必填項】 |
|
Redis |
數據庫服務器IP地址 |
數據庫服務器IP地址。【必填項】 |
數據庫服務器端口號 |
數據庫服務器端口號,默認是6379。【必填項】 |
|
數據庫登錄用戶名稱 |
數據庫登錄用戶名稱。【備用選項】 |
|
數據庫登錄用戶密碼 |
數據庫登錄用戶密碼。【備用選項】 |
|
|
2.2.4 數據源授權機制
數據源授權機制僅僅是針對本系統內而言,而並非指數據源本身的授權驗證機制。數據源授權機制主要分為兩個層級。第一,用戶是否有權訪問數據源,稱之為數據源訪問授權。第二,用戶擁有哪些數據源動作,稱之為數據源動作授權。
2.2.4.1 數據源訪問授權
這個很容易理解,如果用戶沒有數據源訪問授權,將無法讀寫數據,更別說數據源管理操作了,同樣也將無法進行針對此數據源進行數據遷移操作。
系統管理員擁有訪問系統內已注冊的所有數據源的權利,可以為任何數據源授權訪問用戶。
非系統管理員,只能訪問自己注冊和被授權訪問的數據源,可以為自己注冊的數據源授權訪問用戶。
2.2.4.2 數據源動作授權
在本系統中,將HDFS分布式文件系統也視為一種數據源,但是針對它的動作卻和正規意義上的數據庫動作不同,而更傾向於常規的文件系統動作。如下圖所示:
【數據庫動作】
【文件系統動作】
【未完待續】