您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關POSTGRESQL的底層存儲原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1 從對比來看POSTGRESQL 的數據庫(非INSTANCE 那個級別的數據庫),SQL SERVER 的DBA 可以和理解 SQL SERVER 對INSTANCE 和數據庫的概念一樣,不需要費勁,MYSQL 的DBA 也是一樣。 ORACLE的DBA 需要理解,這里的數據庫就是ORACLE中一堆同樣用戶下的表的集合,叫數據庫。非INSTANCE的那個概念。
下圖就是一個POSTGRES QL INSTANCE 中包含的數據庫,有一些事自建的,有些是系統的數據庫, oid是每個數據庫的OBJECT_ID,這點很類似SQL SERVER 中每個對象都有一個OBJECT_ID。
創建一個表company, 這里展示他的表結構,通過查詢COMPANY的表結構,發現查詢語句的寫法的確和PL/SQL 類似,看來SQL SERVER 和MYSQL 在處理表關聯是一路的, ORACLE 和 POSTGRES QL 在寫表關聯是一個思路。
那這個表的實體文件到底存在哪里,
一般一個表會有三個文件,表的數據文件, _FSM _VM 三個文件,組成,FSM 和 VM 和表的數據頁面管理,以及數據清除有關。
POSTGRES QL 對用戶是比較友好的,例如你要查當前庫中的COMPANY表的一些信息,這是其他數據庫都做的不足到的。
POSTGRES QL 僅僅需要輸入 \dt company,直接將結果就輸出了
相對其他數據庫要簡單的快速方便的多。
通常POSTGRESQL 中每個表是存儲在多個固定的 8KB的頁面中的,表存儲在HEAP的文件中,并且由于頁面的組織方式和 ORACLE 有些相似,通過item 指向 數據塊的方式,下圖畫的比較粗糙,實際上POSTGRESQL在每個頁面中的設計是很巧妙的。
通過相關函數(POSTGRESQL 默認不按照,自己源碼編譯,此處不再介紹安裝過程)
通過上面的命令我們可以分析POSTGRESQL 的頁面基本信息
如果我們想知道這個頁面到底有多少空間還可以使用, 使用 UPPER - LOWER 就可以得到我們剩下的空間,并且頭部占用 24B 每個 ITEM 占用 4B,由于元祖(data)的長度并非完全一致,所以這里面通過 alignmentpadding 來補齊元祖,提高I/O的性能,一般64位的機器的長度為8K
下面我們繼續分析,POSTGRESQL 中的元祖信息(DATA),通過下圖
我們可以看到,每一個數據行對應的CTID 和 每一行占用的PAGE中的大小
(SQL SERVER 里面也有類似的函數可以查看,并且一眼就可以看出和 ORACLE, POSTGRESQL 之間的數據頁面的組織不同)
大致一行的數據是上面圖組成的(畫的還是不仔細t-min t-max 少X 應為 t-xmin t-xmax ,見諒)
主要元祖的創建transaction 號 T-XMIN
元祖的刪除transaction 號 T-XMAX
CTID
t_hoff 數據偏移量
data 數據組成
未來驗證上面的行結構,新建一個表 varchar(8000) ,并且大量輸入字符,見下面的圖,大家可以很清楚的查看,頁中的truple(元祖的)偏移量和占用的空間
POSTGRES QL ,在數據存儲底層設計上,和ORACLE 基本相似,并且也是堆表進行數據的存儲,這在很大一方面驗證了,這樣的底層設計有利于大數據的處理,也驗證了部分最近很大一部分機構和企業的在 ORACLE 轉型中,選擇POSTGRES QL 來代替 ORACLE 數據庫的可行性。
看完上述內容,你們對POSTGRESQL的底層存儲原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。