列式資料庫

2021-07-04 03:57:35 字數 3191 閱讀 3046

列式資料庫是以列相關儲存架構進行資料儲存的資料庫,主要適合於批量資料處理和即席查詢。相對應的是行式資料庫,資料以行相關的儲存體系架構進行空間分配,主要適合於小批量的資料處理,常用於聯機事務型資料處理。

資料庫以行、列的二維表的形式儲存資料,但是卻以一維字串的方式儲存,例如以下的乙個表:

empid

lastname

firstname

salary

1smith

joe40000

2jones

mary

50000

3johnson

cathy

44000

這個簡單的表包括員工**(empid), 姓名字段(lastname and firstname)及工資(salary).

這個表儲存在電腦的記憶體(ram)和儲存(硬碟)中。雖然記憶體和硬碟在機制上不同,電腦的作業系統是以同樣的方式儲存的。資料庫必須把這個二維表儲存在一系列一維的「位元組」中,由作業系統寫到記憶體或硬碟中。

行式資料庫把一行中的資料值串在一起儲存起來,然後再儲存下一行的資料,以此類推。

1,smith,joe,40000;

2,jones,mary,50000;

3,johnson,cathy,44000;

列式資料庫把一列中的資料值串在一起儲存起來,然後再儲存下一列的資料,以此類推。

1,2,3;

smith,jones,johnson;

joe,mary,cathy;

40000,50000,44000;

這只是乙個簡化的說法。此外,partitioning, 索引, 快取機制, 檢視, 聯機分析多維資料集, 以及諸如 預寫式日誌和 multiversion concurrency control 此類的事務系統都在現實的應用環境中發揮作用。一般來說, 側重於聯機事務處理 (oltpon-line transaction processing, 聯機事務處理系統) 的系統更適用行資料庫, 而側重於聯機分析處理(on-line analytical processing,聯機事物分析處理) 的系統就必須在行資料庫和列資料庫中找到適當得平衡。

因為硬碟定址時間相較於計算機上其他部件的執行速度來說慢的不是一般,所以常用相同工作負載下的硬碟訪問效能來比較行資料庫和列資料庫。通常,順序讀取資料要比隨機訪問更快[1]

。而且,硬碟定址時間的提公升比起cpu速度的進步要慢得多 (參看 摩爾定律),在使用硬碟作為儲存媒介的系統上這種情況很可能還會持續一段時間。

下面簡單羅列了一些

選擇行資料庫還是列資料庫的權衡依據

。當然,如果能夠把資料全放在記憶體中,那麼使用

記憶體資料庫

效能會更好。

在只需要根據某幾列來聚合資料的時候按列的資料組織方式更有效。因為這樣只需要讀取一部分資料,要比讀取全部資料更快.

當只需要修改某一列值的時候按列的資料組織方式更有效。因為可以直接找到某列資料並修改,而與行中的其他列無關。

當需要某行的多列資料的時候按行的資料組織方式更有效。當行中資料不是太多的情況下一次硬碟定址就可以獲得該行的所有資料。

在新增行資料的時候,如果各列都有值,那麼按行的資料組織方式會更有效,因為只需要一次硬碟定址就可以寫入整行的全部資料.

在實際應用中,面向行的資料儲存架構更適用於oltp-頻繁互動事務的場景。面向列的資料儲存架構更適用於olap-(如資料倉儲)這樣在海量資料((可能達到 terabyte規模))中進行有限複雜查詢的場景。

列式資料庫的代表包括:[hana], [sybase iq]],paraccel, sand/dna analytics和 vertica。編輯

下面以gbase 8a分析型資料庫為例,描述列儲存對資料儲存與管理的作用。

[1]面對海量資料分析的 i/o 瓶頸,gbase 8a 把錶資料按列的方式儲存,其優勢體現在以下幾個方面。

不讀取無效資料:降低 i/o 開銷,同時提高每次 i/o 的效率,從而大大提高查詢效能。查詢語句只從磁碟上讀取所需要的列,其他列的資料是不需要讀取的。例如,有兩張表,每張表100gb 且有100 列,大多數查詢只關注幾個列,採用列儲存,不需要像行存資料庫一樣,將整行資料取出,只取出需要的列。磁碟 i/0 是行儲存的 1/10或更少,查詢響應時間提高 10 倍以上。

高壓縮比:壓縮比可以達到 5 ~ 20 倍以上,資料占有空間降低到傳統資料庫的1/10 ,節省了儲存裝置的開銷。

當資料庫的大小與資料庫伺服器記憶體大小之比達到或超過 2:1 (典型的大型系統配置值)時,列存的 i/o 優勢 

就顯得更加明顯;

gbase 8a 分析型資料庫的獨特列儲存格式,對每列資料再細分為「資料報」。這樣可以達到很高的可擴充套件性:無論乙個表有多大,資料庫只操作相關的資料報,效能不會隨著資料量的增加而下降。通過以資料報為單位進行 i/o 操作提公升資料吞吐量,從而進一步提高i/o效率。

由於採用列儲存技術,還可以實現高效的透明壓縮。

由於資料按列包儲存,每個資料報內都是同構資料,內容相關性很高,這使得gbase 8a 更易於實現壓縮,壓縮比 

通常能夠達到 1:10 甚至更優。這使得能夠同時在磁碟 i/o 和 cache i/o 上都提公升資料庫的效能,使 gbase 8a 在某些場景下的運算效能比傳統資料庫快 100 倍以上。

gbase 8a 允許使用者根據需要設定配置檔案,選擇是否進行壓縮。在啟用壓縮的情況下gbase 8a 根據資料的不同特性以及不同的分布狀況,自動採用相應的壓縮演算法,如:

行程編碼(適用於大量連續重複的資料,特別是排序資料);

基於資料的差值編碼(適用於重複率低,但彼此差值較小的資料列);

基於位置的差值編碼(適用於重複率高,但分布比較隨機的資料列)。

1  行式更適合oltp, 查詢乙個記錄的所有列。

列式更適合olap,非常適合於在資料倉儲領域發揮作用,比如資料分析、海量儲存和商業智慧型;涉及不經常更新的資料。由於設計上的不同,列式資料庫在並行查詢處理和壓縮上更有優勢。而且資料是以列為單元儲存,完全不用考慮資料建模或者說建模更簡單了。要查詢計算哪些列上的資料,直接讀取列就行。

2   列式在儲存方面占有很大的優勢,能有效提高資料壓縮比,節省儲存空間。

行式資料庫與列式資料庫

1.行式資料庫與列式資料庫 行式資料庫和列式資料庫的不同在於物理儲存方式的不同 待考證 列式資料庫 是以列相關 儲存 架構進行資料儲存的 資料庫 主要適合與批量 資料處理 和即席查詢 相對應的是行式資料庫,資料以行相關的 儲存 體系架構進行空間分配,主要適合與小批量的 資料處理 常用於聯機 事務 型...

行式資料庫 VS 列式資料庫

1 行式資料庫 2 列式資料庫 1 行式更適合oltp,查詢乙個記錄的所有列。列式更適合olap,非常適合於在資料倉儲領域發揮作用,比如資料分析 海量儲存和商業智慧型 涉及不經常更新的資料。由於設計上的不同,列式資料庫在並行查詢處理和壓縮上更有優勢。而且資料是以列為單元儲存,完全不用考慮資料建模或者...

列式資料庫和行式資料庫

列式資料庫 是以列相關儲存架構進行資料儲存的資料庫,主要適合於批量資料處理和即時查詢。相對應的是行式資料庫,資料以行相關的儲存體系架構進行空間分配,主要適合於小批量的資料處理,常用於聯機 事務型資料處理。優點 缺點 資料庫以行 列的二維表的形式儲存資料,但是卻以一維字串的方式儲存,例如以下的乙個表 ...