1. 程式人生 > >PostgreSQL的資料儲存(十七)---資料儲存的知識擴充套件

PostgreSQL的資料儲存(十七)---資料儲存的知識擴充套件

7          擴充套件話題

7.1      列儲存

在本篇文章中,資料的儲存格式,從資料頁(buf頁)到元組(tuple)到列資訊的組織方式(微物件),歷經一個從大到小的變遷。從物理儲存的角度看,儲存資料的基本單位是頁(8k);從邏輯儲存的角度看,儲存資料的基本單位,是元組,即PG儲存方式,還是行儲存。

與行儲存相對的一個方式,是列儲存。

所謂列儲存,對於一個二維表來講,不再是以二維表的行為基本儲存單位,而是以二維表的列為基本儲存單位。這樣,同一資料型別的資料就儲存在了一起,一次讀出的,是一個列的一部分資訊。這有點像垂直分割槽的概念,但實現上,可能有很大不同。

7.2      分割槽

資料儲存,如果可以分塊,則可以減少IO,有效提高效率。

分割槽,包括水平分割槽和垂直分割槽,還有水平和垂直的組合分割槽。

分割槽的概念,是化整為零的思維方式,是把大表分解為小表;水平分割槽,是在表上橫向分塊,這樣讀子塊可以避免整個表讀入,減少IO;垂直分割槽,是在表上縱向分塊,減少所有列讀入的情況。

7.3      資料壓縮

PG中,TOAST方式,是一種資料壓縮的處理方式。另外,如果普通資料要壓縮,可能的思路有:

1.         在頁面(buf)讀寫前,進行解壓和壓縮

2.         形成tuple時,可以考慮壓縮

3.         在形成tuple前,先對每個列進行壓縮;也可以區分列的型別,對不同型別提供不同的壓縮方式

這是三種不同級別的壓縮,粒度不同,但都可以實現。

7.4      資料加密

可加解密的地方,道理同資料壓縮。

7.5      儲存裝置

為了提高效能,更換儲存裝置,也是一個思考方向。使用盤陣、固態硬碟、flash盤等。

7.6      裸裝置

裸裝置,又名裸分割槽(原始分割槽),是一種沒有經過格式化,不被Unix通過檔案系統來讀取的特殊字元裝置。由應用程式負責對它進行讀寫操作,不經過作業系統的檔案系統的緩衝。這種裝置少了作業系統這一層,I/O效率更高。

對資料庫系統提高IO效率有效。

可參考:

7.7      作業系統層呼叫

對於作業系統庫函式呼叫、作業系統的一些設定方式,也會決定著資料庫系統的儲存效率。

可以參見:Linux關及效能的相關核心引數(一)