國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
40
第二節 Avro 序列化資料結構轉換
前一節中介紹了關聯式資料結構轉換至欄導向資料結構之機制。然而,HBase 官方文件中指出:「HBase currently does not do well with anything above two or three column families so keep the number of column families in your schema low.」(The Apache HBase Book,2012)。且於系統實作中發現,資料的寫入及掃描速度相差十 倍之多,因此希望將 Column Family(CF)以及 Column Qualifier(CQ)的數量減少,以 增加存取的速度。
而最直覺的做法就是將所有欲紀錄的資訊壓縮到一個 CQ 中。因此本研究期望 透過序列化的技術將資料壓縮,儲存於單一 CQ 中。在文獻探討中,可以得知序列 化的技術相當多,序列化技術 Avro 是 Hadoop 家族中專屬的序列化技術,設計用 於支援大批量資料交換的應用。因此,本研究選用之於 Hadoop 整合性較佳的 Avro 序列化技術。
圖 15. 欄導向 HTable 資料結構轉換至 HTable 使用 Avro 序列化儲存示意圖
圖 15 是相較於上一節的資料庫結構設計的對照圖。AS-IS 是上一節中提到之 實體關係轉換後的資料結構。但因 HBase 效能的關係,本研究期望將 CF 與 CQ 數 量減少,因此利用 Avro 將圖 15 紅色框格的一列資料序列化為 TO-BE 中的 byte array,
CF 與 CQ 的數量都降為 1,期望藉由此種作法增加讀取寫入之效能。
要將資料結構序列化,必須於 Avro 定義 Schema 結構,於文獻探討中,我們
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
41
得知 Avro 的資料型態支援八種基本類型(Primitive Type)和六種複雜類型(Complex Type),因此本研究將依照 ERM 實體間的五種關係,並利用 Avro 所提供的型態來 設計複雜的資料結構。
第一段 實體關係轉換
圖 16. Avro 實體關係轉換示意圖
圖 16 中最左邊為 ERM 的實體 Table A,擁有 AC、AD 與 AE 三個 Fields,紅 色框格的一列會被序列化成一條 byte array 儲存至 HTable 中相對應的 RK 的 cell 中。如圖 16 所示,一列的資料會需要儲存 AC、AD 與 AE 三個 Field 的值,因此 在 Avro Schema 中我們選擇使用 Record 來代表一個物件,而 Record 下的欄位則為 關聯式 table 中的 Fields。因此,我們將得到三個 Field,分別為 AC、AD 與 AE,
且其底下的資料型態設定為 String;此處的資料型態可以與使用者欲儲存的資料型 態相對應。以圖片為例,其 Field 可能會有照相地點、曝光度、光圈等屬性;因此,
一張圖片會是 Avro 的一筆 Record,而照相地點、曝光度、光圈為其底下的 Fields。
又資料型態可依 Field 的類型設定,如照相地點可以設定為 String 而焦距則可以設 定為 int。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
42
第二段 一對一關係轉換
圖 17. Avro 一對一關係轉換示意圖
本段將探討 ERM 中 table 之轉換機制。圖 17 中左方為擁有 1-1 關係的兩個實 體 A 與 B,於前一節中可以知道一對一的關係可以合併為一張 HTable 並由其中一 實體的主鍵當作其 RK,至於哪個實體被當作 RK 則依使用者之需求來決定。為了 儲存一對一的關係,B 的資訊也必須被儲存到 A 的 table 中。本轉換機制中,將其 定義為三個步驟:
轉換步驟:
1. 假設 A 與 B 為 ERM 中具有一對一關係的兩個實體 Table,並欲以 A 為主要存 取 table。
2. 對 A 做 Entity(A)之轉換,對於每個列資料可以得到一 Avro Record-R(A)。
3. 將實體 table A 中,外鍵所對應的 RK(B)擁有的所有屬性轉換為 R(A)中之 Fields,
並將其值賦予給該 Field。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
43
第三段 一對多關係轉換
圖 18. Avro 一對多關係轉換示意圖-HA
圖 18 之兩實體 A 與 B 擁有一對多之關係,A 為一方而 B 為多方。轉換規則 中,定義每個實體為 HTable 中之一 table,因此為了保存 A 與 B 之一對多關係,
必須將關係分別儲存至 A 與 B 之 table 中。
對於 A 方來說,會擁有多個實體 B。簡單的來想,必須將多個實體 B 資訊儲 存至 A 中,因此在 Avro Schema 中會先使用 Entity(A)的方式得一保存 A 資訊之 Record;而為了保留 B 資訊,本研究選擇 Avro 複雜形態中的 Map 來儲存多個 B 實體。因此在 A 中增加一 Field 並以 Map 複雜型態儲存 B 資訊。Map key 儲存對 應 B 之 RK,Value 儲存 B 之 Record。如圖所示,Field B 儲存兩筆 B Record。
從上述邏輯推演,本研究定義一對多之單方轉換規則如下:
1-m-single(A, B)
假設:
1. 假設實體 A 與實體 B 擁有一對多關係,A 為一方而 B 為多方。
轉換步驟:
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
44
1. 對 A 進行 Entity(A)轉換
2. 進行 Entity(B)轉換,得到 B Record 並將此 Record 塞入對應 A 之 Map 中,B 之 RK 為 Map Key。
3. 回傳 A Record。
然而在一對多的轉換中,多方也必須轉換為一張 HTable 供使用者進行存取。
根據 Google Bigtable 的觀念,應該於 table 中盡量儲存大量資訊,因此多方必須儲 存一方之資訊。對於多方來說與一方是一對一的關係,因此第一步必須進行實體 關係的轉換。對於多方來說,一的多方會擁有一個一方的 Record;為了保留與一 方間的關係,另創一 Field 來儲存對應之 A 方 Record。
圖 19. Avro 一對多關係轉換示意圖-HB
如圖 19 所示,HB 擁有三個 Fields。BE 與 BF 的資料型態為 String,儲存原 B 之資訊,而 Field A 的資料型態為 Record,儲存經 Entity(A)轉換後之 A Record。A Record 為與 B Record 外鍵所對應之紀錄。
本研究定義轉換規則如下:
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
45
1-m-multi(A, B)
假設:
1. 假設實體 A 與實體 B 擁有一對多關係,A 為一方而 B 為多方。
轉換步驟:
1. 對 A 進行 1-m-single(A, B)轉換得到 table HA。
2. 進行 Entity(B),得到 table HB,另創一 Field 儲存與 B 對應之 A Record。
3. 回傳 table HA、HB。
第四段 多對多關係轉換
多對多可以視為兩個一對多關係的轉換,因此可以視為兩個一對多關係的轉 換,如果兩個實體間有一方為弱實體則不需進行該方之轉換。
圖 20. Avro 多對多關係轉換示意圖
圖 20 為經 m-n 轉換後的 HA table。可以由圖中看出 Record A 利用 Map 形式 來儲存與 B 一對多的關係。另外,由於 table C 仍有依賴於 A、B 的 C 資料,因此 也必須記錄於 HA 與 HB 兩 table 中。對於 HA 來說 C 的資訊依靠 B 之 RK 而來,
所以可以視為處理 B 與 C 之一對多關係。對於 B 來說 C 為一方,因此 C 將成為 B
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
46
下之一 Field。
本研究定義轉換規則如下:
m-n(A, B)
假設:
1. 假設實體 A 與實體 B 擁有多對多關係,兩實體皆不為弱實體。
轉換規則
1. 進行 1-m(A, 1-m(B, C))。
2. 進行 1-m(B, 1-m(A, C))。
第五段 遞迴關係轉換
圖 21. Avro 遞迴關係轉換示意圖
如圖 21 所示,遞迴關係可以視為多個一對多關係轉換,以 ABC 三個具有遞 迴關係的實體 Table 為例假設 Record T 為暫時儲存的 Record。先處理 B 與 C 的一 對多關係,並將結果產生之 Record 賦予 T。由於遞迴之關係,T 具有與 A 一對多 之關係,因此再對 T 與 A 進行一對多關係之轉換。具體轉換規則如下:
‧
HBase 屬於 NoSQL 資料庫的一種。NoSQL 資料庫的興起是源於現代典型的關 聯式資料庫在一些必須快速存取大量資料的應用中表現非常差,例如巨量文檔建 一致性(Data Consistency)原則,使得各 table 可以獲取的資訊量增加。這樣的處理 方式,能使在需要快速的回應或大量資料處理分析的系統,減少與磁碟 Input/Output (I/O)的次數,增加處理的效能。舉例來說,於欄導向資料結構轉換中,一對多關