成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PostgreSQL邏輯和物理結(jié)構(gòu)

IT那活兒 / 2168人閱讀
PostgreSQL邏輯和物理結(jié)構(gòu)

點(diǎn)擊上方“IT那活兒”,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!?。?/span>





文章前言



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





PostgreSQL的邏輯結(jié)構(gòu)



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

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





PostgreSQL的物理結(jié)構(gòu)



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


如下圖所示,每個(gè)數(shù)據(jù)庫的oid都對應(yīng)了$PGDATA/base路徑下面的一個(gè)子目錄:
2. 表空間的物理結(jié)構(gòu)
PostgreSQL初始化時(shí)默認(rèn)創(chuàng)建pg_default和pg_global這兩個(gè)表空間,pg_default表空間的物理位置為$PGDATAase目錄,pg_global表空間的物理位置為$PGDATAglobal目錄。用戶新建的表空間對應(yīng)的目錄都位于pg_tblspc下。
一個(gè)表空間可以同時(shí)被多個(gè)數(shù)據(jù)庫使用,這時(shí),每個(gè)數(shù)據(jù)庫都會(huì)在表空間的路徑下創(chuàng)建一個(gè)新的子路徑。
每創(chuàng)建一個(gè)用戶表空間就會(huì)在$PGDATApg_tblspc目錄下面創(chuàng)建一個(gè)軟鏈接,連接到表空間指定的目錄位置。
例如,當(dāng)我們創(chuàng)建一個(gè)名為tbs_test表空間,路徑是/home/postgres/data2/tbs_test,那么就會(huì)在pg_tblspc目錄下面生成一個(gè)軟連接的目錄16425,這里的16425就是表空間對應(yīng)的oid,再往下可以看到子目錄16384,對應(yīng)的是database的oid。
3. 表和索引的物理結(jié)構(gòu)
表或者索引超過 1GB 之后,它就被劃分成1G大小的segment。第一個(gè)segment的文件名和文件節(jié)點(diǎn)相同;隨后的segment被命名為 filenode.1、filenode.2等等。
這樣的安排避免了在某些有文件大小限制的平臺(tái)上的問題(實(shí)際上,1GB只是默認(rèn)的segment尺寸。segment尺寸限制可以在編譯PostgreSQL時(shí)使用配置選項(xiàng)--with-segsize進(jìn)行調(diào)整)。
如下:
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那活兒(上海新炬王翦團(tuán)隊(duì))

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129590.html

相關(guān)文章

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

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

    Martin91 評(píng)論0 收藏0
  • 大佬為你揭秘微信支付的系統(tǒng)架構(gòu),你想知道的都在這里了

    摘要:年之前,微信支付業(yè)務(wù)快速發(fā)展,需要一款數(shù)據(jù)庫能夠安全高效的支撐微信支付商戶系統(tǒng)核心業(yè)務(wù),這個(gè)重任落在了騰訊數(shù)據(jù)庫團(tuán)隊(duì)自研上。由于是用于微信支付的核心數(shù)據(jù)庫,騰訊被定位為安全高效,穩(wěn)定,可靠的數(shù)據(jù)庫集群。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由李躍森發(fā)表于云+社區(qū)專欄李躍森,騰訊云PostgreSQL首席架構(gòu)師,騰訊數(shù)據(jù)庫團(tuán)隊(duì)架構(gòu)師,負(fù)責(zé)微信支付商戶系統(tǒng)核心數(shù)...

    Terry_Tai 評(píng)論0 收藏0
  • 讓 TiDB 訪問多種數(shù)據(jù)源 | TiDB Hackathon 優(yōu)秀項(xiàng)目分享

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

    OBKoro1 評(píng)論0 收藏0
  • 讓 TiDB 訪問多種數(shù)據(jù)源 | TiDB Hackathon 優(yōu)秀項(xiàng)目分享

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

    JasonZhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<