国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PostgreSQL邏輯和物理結構

IT那活兒 / 2141人閱讀
PostgreSQL邏輯和物理結構

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了!?。?/span>





文章前言



在了解PostgreSQL邏輯和物理結構之前,我們先了解PostgreSQL的系統架構,PostgreSQL使用一種客戶端/服務器的模型。
其會話由下列相關的進程或程序組成:
一個服務器進程,它管理數據庫文件、接受來自客戶端應用與數據庫的連接并且在數據庫上執行操作,該進程叫做postgres。
那些需要執行數據庫操作的用戶的客戶端應用。
客戶端應用可能本身就是多種多樣的:
可以是一個面向文本的工具,也可以是一個圖形界面的應用,或者是一個通過訪問數據庫來顯示網頁的網頁服務器,或者是一個特制的數據庫管理工具。例如PoWA,pgAdmin等。
PostgreSQL采取類似于Oracle的多進程模式,在服務器處理來自客戶端的多個并發請求時,它會為每個連接fork一個新的進程。從這個時候開始,客戶端和新服務器進程就不再經過 postgres進程的進行通信。
因此,主服務器進程總是在運行并等待著客戶端的連接,而新派生的進程就負責處理客戶端的各種操作。





PostgreSQL的邏輯結構



Database cluster: 
數據庫集群,或者叫數據庫實例,由PostgreSQL server管理的數據庫的集合,由多個database組成。每個正在運行的PostgreSQL server實例都管理著一個或多個數據庫。
database:
由各種數據庫對象構成,例如table,indexes, view,function,sequence等。在數據庫對象的層次結構中,database位于最頂層。通常每個數據庫對象(table、function等) 屬于并且只屬于一個database,但是也有幾個系統表例如pg_database屬于整個數據庫集群,對于集群中的每個database來說都是可訪問的)。

圖 1  PostgreSQL的邏輯結構
PostgreSQL中的所有數據庫對象都通過對象標識符oid(object identifiers), oid是無符號的四字節整數,數據庫對象的oid存放在相關的system catalog表中,且數據庫對象與oid的關系取決于對象的類型,例如,數據庫和表的oid分別存放在pg_database,pg_class表中,通過下面的查詢語句可以找到指定對象的oid。
示例:
查看數據庫pgtest的oid:
查看表products的oid:
當我們執行initdb命令初始化PostgreSQL時,默認就創建了template0、 template1和postgres這3個數據庫。
template0和template1數據庫是創建用戶數據庫時將要用到的模版數據庫,它們包含了系統的元數據表。
initdb剛完成時,template0和template1數據庫中的表是一樣的,設置兩個模版數據庫的原因是template0是初始狀態,template1則可以集成用戶的某些需求。用戶數據庫是通過克隆template1來創建的。postgres數據庫是使用模版template1創建的默認數據庫,如果連接時不指定數據庫名,則默認連接到postgres數據庫。
查看數據庫集群當前有哪些數據庫:
上圖中,pgtest是初始化完成之后用戶新創建的一個數據庫。
通過datistemplate列可知template0和template1是用戶創建數據庫時使用的模版數據庫,其他的則不是模版數據庫。
通過datlowconn列可知該數據庫是否允許訪問。template0數據庫不能被訪問,因此該數據庫不能被修改。
tablespace:
PostgreSQL的表空間的概念與其他關系數據庫有所不同,在PostgreSQL中,一個表空間對應的是一個目錄,里面存放的是數據目錄之外的一些數據,一般是業務數據。
當我們初始化PostgreSQL后,就默認創建了pg_default和pg_global這兩個表空間。
建表時如果沒有指定特定的表空間,表默認存儲在pg_default表空間中。pg_global表空間中默認存儲的是用于管理整個數據庫集群的表。
block:
在PostgreSQL中,將保存在磁盤中的塊稱為Page,而將內存中的塊稱為Buffer,表和索引稱為Relation,行稱為Tuple。數據的讀寫是以Page為最小單位,每個Page默認大小為8KB,頁的尺寸可以在編譯PostgreSQL時指定。





PostgreSQL的物理結構



當我們初始化一個新的數據庫集群的時候,會在指定目錄下創建一個數據目錄,這個數據目錄的路徑通常用環境變量$PGDATA來表示,初始化完成后,會在$PGDATA下生成相關的子目錄以及文件。
1. 數據庫的物理結構
圖2展示了PostgreSQL數據庫集群的物理結構。database是$PGDATA/base路徑下的子目錄,每個表和索引(至少)是一個文件,存儲在它所屬的數據庫(例如testdb)的子目錄下。另外,還有幾個包含特定數據和配置文件的子目錄。
圖2  PostgreSQL的物理結構
下面是數據目錄下的文件和子目錄的信息:
相關文件和子目錄的介紹如下:


如下圖所示,每個數據庫的oid都對應了$PGDATA/base路徑下面的一個子目錄:
2. 表空間的物理結構
PostgreSQL初始化時默認創建pg_default和pg_global這兩個表空間,pg_default表空間的物理位置為$PGDATAase目錄,pg_global表空間的物理位置為$PGDATAglobal目錄。用戶新建的表空間對應的目錄都位于pg_tblspc下。
一個表空間可以同時被多個數據庫使用,這時,每個數據庫都會在表空間的路徑下創建一個新的子路徑。
每創建一個用戶表空間就會在$PGDATApg_tblspc目錄下面創建一個軟鏈接,連接到表空間指定的目錄位置。
例如,當我們創建一個名為tbs_test表空間,路徑是/home/postgres/data2/tbs_test,那么就會在pg_tblspc目錄下面生成一個軟連接的目錄16425,這里的16425就是表空間對應的oid,再往下可以看到子目錄16384,對應的是database的oid。
3. 表和索引的物理結構
表或者索引超過 1GB 之后,它就被劃分成1G大小的segment。第一個segment的文件名和文件節點相同;隨后的segment被命名為 filenode.1、filenode.2等等。
這樣的安排避免了在某些有文件大小限制的平臺上的問題(實際上,1GB只是默認的segment尺寸。segment尺寸限制可以在編譯PostgreSQL時使用配置選項--with-segsize進行調整)。
如下:
cd $PGDATA
$ ls -la -h base/16384/19427*
-rw------- 1 postgres postgres 1.0G Aug 6 10:33 data/base/16384/19427
-rw------- 1 postgres postgres 45M Aug 6 10:33 data/base/16384/19427.1





本文作者:魏 斌

本文來源:IT那活兒(上海新炬王翦團隊)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129590.html

相關文章

  • 新書推薦 |《PostgreSQL實戰》出版(提供樣章下載)

    摘要:作者譚峰張文升出版日期年月頁數頁定價元本書特色中國開源軟件推進聯盟分會特聘專家撰寫,國內多位開源數據庫專家鼎力推薦。張文升中國開源軟件推進聯盟分會核心成員之一。 很高興《PostgreSQL實戰》一書終于出版,本書大體上系統總結了筆者 PostgreSQL DBA 職業生涯的經驗總結,本書的另一位作者張文升擁有豐富的PostgreSQL運維經驗,目前就職于探探科技任首席PostgreS...

    Martin91 評論0 收藏0
  • 大佬為你揭秘微信支付的系統架構,你想知道的都在這里了

    摘要:年之前,微信支付業務快速發展,需要一款數據庫能夠安全高效的支撐微信支付商戶系統核心業務,這個重任落在了騰訊數據庫團隊自研上。由于是用于微信支付的核心數據庫,騰訊被定位為安全高效,穩定,可靠的數據庫集群。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由李躍森發表于云+社區專欄李躍森,騰訊云PostgreSQL首席架構師,騰訊數據庫團隊架構師,負責微信支付商戶系統核心數...

    Terry_Tai 評論0 收藏0
  • 讓 TiDB 訪問多種數據源 | TiDB Hackathon 優秀項目分享

    摘要:拿到返回結果進一步的進行計算處理。比較痛苦的經歷不支持,我們就只好寫內置函數,就把另外一個模塊拖下來,自己修改加上語法,然后在加上自己設計的內置函數。其次就是涉及的的源碼模塊很多,從優化器執行器內置函數以及各種各樣的結構。 本文作者是來自 CC 組的蘭海同學,他們的項目《讓 TiDB 訪問多種數據源》在本屆 TiDB Hackathon 2018 中獲得了二等獎。該項目可以讓 TiDB...

    OBKoro1 評論0 收藏0
  • 讓 TiDB 訪問多種數據源 | TiDB Hackathon 優秀項目分享

    摘要:拿到返回結果進一步的進行計算處理。比較痛苦的經歷不支持,我們就只好寫內置函數,就把另外一個模塊拖下來,自己修改加上語法,然后在加上自己設計的內置函數。其次就是涉及的的源碼模塊很多,從優化器執行器內置函數以及各種各樣的結構。 本文作者是來自 CC 組的蘭海同學,他們的項目《讓 TiDB 訪問多種數據源》在本屆 TiDB Hackathon 2018 中獲得了二等獎。該項目可以讓 TiDB...

    JasonZhang 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<