BOB登陆 公司新聞

  • 產品與解決方案
  • 行業解決方案
  • 服務
  • 支持
  • 合作夥伴
  • 關於我們

MPP分析數據庫——幫您選定行式還是列式存儲

【發布時間:2016-12-19】

數據庫的簡單分類

首先,當前數據庫簡單分為OLTP 數據庫和 OLAP 數據庫

OLTP,也叫聯機事務處理(Online Transaction Processing),表示事務性非常高的係統,一般都是高可用的在線係統,以大並發多事務寫入以及小查詢為主,評估其係統的時候,一般看其每秒執行的Transaction以及Execute SQL的數量。在這樣的係統中,單個數據庫每秒處理的寫入往往超過幾千個,或者是幾萬個,查詢語句的執行量每秒幾百甚至幾千個。數據密集存儲方式都是按行存儲,行寫入能夠提供高速的寫入性能。

典型的行寫入數據庫係統有銀行交易係統數據庫、證券係統、購票係統等,如銀行的業務數據庫,就是很典型的行存儲數據庫。

OLAP,也叫聯機分析處理(Online Analytical Processing)係統,有的時候也叫DSS決策支持係統,就是我們說的數據倉庫。在這樣的係統中,語句的執行量不是考核標準,因為一條語句的執行時間可能會非常長,讀取的數據也非常多。所以,在這樣的係統中,考核的標準往往是磁盤子係統的吞吐量(帶寬),如能達到多少MB/s的流量。對於OLAP係統來說,絕大多數時候數據庫上運行著的是報表作業,執行基本上是聚合類的SQL 操作。例如:SUM( ), COUNT( ), AVG( ) 等函數的使用。

OLAP 係統的數據庫要求大吞吐量,高速輸出的性能保證報表統計的快速完成,提高係統響應時間從而減少用戶等待時間。列式存儲的數據庫非常適合這樣的應用場景。

數據庫存儲原理

關係型數據庫係統以二維表的形式呈現數據,比如下麵的員工表

RowId

EmpId

Lastname

Firstname

Salary

001

10

Smith

Joe

40000

002

12

Jones

Mary

50000

003

11

Johnson

Cathy

44000

004

22

Jones

Bob

55000

上麵的格式僅僅存在於理論和邏輯中,事實上存儲設備要求數據序列化為某種形式。

我們知道對於硬盤來說,最昂貴的操作是查找。為了提高最終性能,所需要的相關數據應該以某種方式去存儲從而使“查找”操作盡可能少。硬盤由一係列規定大小的塊(block)組成, 通常足以容納數據表的幾行。通過把相關的行存儲在塊中,僅僅一定數量的塊需要被讀取從而最小化了查找的數量。

行式存儲原理

傳統的存儲方案是按行序列化數據,如下所示

001:10,Smith,Joe,40000;002:12,Jones,Mary,50000;003:11,Johnson,Cathy,44000;004:22,Jones,Bob,55000;

行式存儲係統被設計為以很少的操作就可以返回整行或整條記錄。當我們需要獲取關於某個特定對象的信息的時候,比如某個用戶的聯係信息或某件商品信息,這種設計就相當適用。

但是行式存儲不適用於對整個數據集的操作。比如,找出工資在40000到50000之間的記錄,行式存儲係統可能得找遍這個數據集才能找出匹配的所有記錄。當數據量相當大時,這些記錄存儲於分散的不同的磁盤塊中,這樣相當多的磁盤操作就變得不可避免了。

為了提高這種類型操作的性能,大多數DBMS數據庫係統使用索引技術。它把列的值存儲在一起,同時與記錄ID關聯。如下所示

001:40000;002:50000;003:44000;004:55000;

我們可以看到,這裏僅僅存儲整個數據集的一部分,一般來說索引比整個主表要小很多。掃描小的數據集所需要的磁盤操作當然減少了。然而,當有新的數據寫入數據庫時,索引需要維護,這個對係統增加了額外的開銷。

有些行式存儲數據庫被設計為完全運行於內存中,及內存數據庫。這樣的係統不依賴於磁盤操作,對於整個數據庫的任何數據訪問具有同等時間. (equal-time access) 這樣的係統可能會很簡單有效,然而它們管理的數據僅限於存儲在內存中。

列式存儲原理

列式存儲係統將某一列的所有值序列化在一起,然後是另一列的所有值。對於我們的例表,數據存儲結構如下

10:001,12:002,11:003,22:004;Smith:001,Jones:002,Johnson:003,Jones:004;Joe:001,Mary:002,Cathy:003,Bob:004;40000:001,50000:002,44000:003,55000:004;

這樣的結構看起來與行式存儲中的索引結構看起來很像,對吧。是的,沒錯,看起來很接近。

隻是,它們之間有顯著的區別。行式存儲中,主鍵是rowid(它關聯到索引數據);列式存儲中,主鍵是數據本身(關聯回rowid),即“數據即索引”。對於常見的查詢,如“所有名字叫Jones的人”,僅僅需要一個操作答案將被找到;另外,像一些聚合運算,基於這樣的存儲結構其性能能得以大幅提高。

行式與列式存儲各自優勢

基於行的存儲是將數據組織成多個行,這樣就能在一個操作中找到所有的列。這種做法的缺點是必須每次處理一整行,而不是隻處理自己需要的列。不過,這樣在處理相同實體的兩個或多個列的查詢時能夠取得更快的速度,而且可以提高更新、插入和刪除操作的速度。

基於列的訪問存在的缺點是載入速度通常比較慢,因為源數據在外部來源中是以行或者記錄的形式表示的。這樣做的優點是針對某個列中的值進行簡單查詢的速度非常快,需要的內部存儲資源最少。這表示對某個列中特定值的搜索可以直接進入該列的存儲區,而不需要掃描整行的數據。這樣也使得數據壓縮變得更容易,因為一個列中的數據通常具有相同的數據類型。這種體係結構在處理數據倉庫使用的海量數據時沒有問題,但不適合需要進行大量以行的方式進行訪問和更新操作的聯機事物處理。就是這種數據庫之一。在由一萬億行組成的測試數據集中,輸入數據共很明顯,這是一種適合數據倉庫的技術。這種技術雖然在壓縮和快速訪問方麵有優勢,但也存在插入操作複雜的缺點。

行式與列式存儲各自優勢

BOB登陆 大數據產品DataEngineMPP主要瞄準的是大批量統計的數據倉庫市場。所以根據業務的需要選擇了批量計算性能高,輸出更高效的列式存儲技術。

BOB登陆

BOB登陆 依托先進的IT技術助推新經濟,推動國家實現強國富民,與有榮焉。

BOB登陆
官網
聯係我們