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 作業系統層呼叫
對於作業系統庫函式呼叫、作業系統的一些設定方式,也會決定著資料庫系統的儲存效率。