-
PostgreSQL
鎖定
PostgreSQL是一種特性非常齊全的自由軟件的對象-關係型數據庫管理系統(ORDBMS),是以加州大學計算機系開發的POSTGRES,4.2版本為基礎的對象關係型數據庫管理系統。POSTGRES的許多領先概念只是在比較遲的時候才出現在商業網站數據庫中。PostgreSQL支持大部分的SQL標準並且提供了很多其他現代特性,如複雜查詢、外鍵、觸發器、視圖、事務完整性、多版本併發控制等。同樣,PostgreSQL也可以用許多方法擴展,例如通過增加新的數據類型、函數、操作符、聚集函數、索引方法、過程語言等。另外,因為許可證的靈活,任何人都可以以任何目的免費使用、修改和分發PostgreSQL。
[1]
PostgreSQL簡述
PostgreSQL是一個功能非常強大的、源代碼開放的客户/服務器關係型數據庫管理系統(RDBMS)。PostgreSQL最初設想於1986年,當時被叫做Berkley Postgres Project。該項目一直到1994年都處於演進和修改中,直到開發人員Andrew Yu和Jolly Chen在Postgres中添加了一個SQL(Structured Query Language,結構化查詢語言)翻譯程序,該版本叫做Postgres95,在開放源代碼社區發放。
1996年,再次對Postgres95做了較大的改動,並將其作為PostgresSQL6.0版發佈。該版本的Postgres提高了後端的速度,包括增強型SQL92標準以及重要的後端特性(包括子選擇、默認值、約束和觸發器)。
PostgreSQL是一個非常健壯的軟件包,有很多在大型商業RDBMS中所具有的特性,包括事務、子選擇、觸發器、視圖、外鍵引用完整性和複雜鎖定功能。另一方面,PostgreSQL也缺少商業數據庫中某些可用的特性,如用户定義的類型、繼承性和規則。從用户的角度來講,PostgreSQL惟一不具備的主要特性就是外部連接,在今後的版本中會將其加入。
PostgreSQL支持標準的SQL語言並加入了很多其他的功能以確保數據能夠安全存儲,根據數據負載能夠靈活擴展。它兼容所有的主流操作系統,除SQL的基本類型外還支持JSON、Key-value等數據類型,在數據一致性、高併發、高可用、數據恢復、數據安全等方面都有極為出色的表現,並且還有很多類似PostGIS這樣的強大插件。PostgreSQL的上述強大特性為其在世界範圍內贏得了很高的讚譽,也成為了很多開發者和機構首選的開源關係數據庫系統。
[4]
PostgreSQL提供了兩種可選模式。一種模式保證如果操作系統或硬件崩潰,則數據將保存到磁盤中,這種模式通常比大多數商業數據庫要慢,這是因為它使用了刷新(或同步)方法;另一種模式與第一種不同,它不提供數據保證,但它通常比商業數據庫運行得快。遺憾的是,還沒有一種折中的模式:既提供一定程度的數據安全性,又有較快的執行速度。今後的版本將會提供這種模式。
[2]
PostgreSQL主要特點
PostgreSQL 的 主要優點如下:
- 維護者是PostgreSQL Global Development Group,首次發佈於1989年6月。
- 表和視圖方面,PostgreSQL支持臨時表,而物化視圖,可以使用PL/pgSQL、PL/Perl、PL/Python或其他過程語言的存儲過程和觸發器模擬。
- 索引方面,全面支持R-/R+tree索引、哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN(用來加速全文檢索),從8.3版本開始支持位圖索引。
- 其他對象上,支持數據域,支持存儲過程、觸發器、函數、外部調用、遊標
- 數據表分區方面,支持4種分區,即範圍、哈希、混合、列表。
- 從事務的支持度上看,對事務的支持與MySQL相比,經歷了更為徹底的測試。
- My ISAM表處理方式方面,MySQL對於無事務的MyISAM表,採用表鎖定,1個長時間運行的查詢很可能會阻礙對錶的更新,而PostgreSQL不存在這樣的問題。
- 從存儲過程上看,PostgreSQL支持存儲過程。因為存儲過程的存在也避免了在網絡上大量原始的SQL語句的傳輸,這樣的優勢是顯而易見的。
- 用户定義函數的擴展方面,PostgreSQL可以更方便地使用UDF(用户定義函數)進行擴展。
PostgreSQL 的 應用劣勢如下:
- 最新版本和歷史版本不分離存儲,導致清理老舊版本時需要做更多的掃描,代價比較大但一般的數據庫都有高峯期,如果合理安排VACUUM,這也不是很大的問題,而且在PostgreSQL9.0中VACUUM進一步被加強了。
PostgreSQL存儲系統
PostgreSQL存儲系統是由以下幾個子模塊所構成的:
- 頁面管理子模塊:對PostgreSQL緩衝區頁面的組織結構進行定義以及提供頁面操作的方法。
- 緩衝區管理子模塊:管理PostgreSQL的緩衝區,包括本地緩衝區和共享緩衝區。
- 存儲設備管理子模塊:數據庫記錄是存儲在存儲介質上的,存儲設備管理子模塊將屏蔽不同物理存儲設備(塊設備,流設備)接口函數的差異,向上層緩衝區管理子模塊提供統一的訪問接口函數。
- 文件管理子模塊:一般的操作系統對一個進程允許打開的文件數是有限制的,而PostgreSQL服務器有些時候需要打開的文件數是很多的,因此PostgreSQL文件管理子模塊自身為了突破這個瓶頸,封裝了文件的讀寫操作,在這裏建立了一個LRU鏈表,通過一定的替換算法來對打開的文件進行管理,使得可以打開的文件數目不受操作系統平台的限制。 [3]
PostgreSQL內存頁面
PostgreSQL內存頁面的默認大小是8kB。頁面的邏輯結構被定義成三個部分:頁首部(PageHeader)、元組記錄空間(ltem Space)以及特殊空間(Special Space)。
頁首部記錄了頁面的使用信息,這些信息由元組記錄空間和特殊空間的偏移量地址、頁面分佈格式版本號和頁面的事物日誌記載點等等所組成。
元組記錄空間是存儲元組信息的地方,在這裏面每個元組記錄被稱為一個ltem,Item由ltemld和元組數據組成,ltemld內部定義了元組在頁面中的偏移量、ltem指針的狀態以及元組項的比特位數長度。
特殊空間是為了頁面操作所需要的。為了其他模塊對頁面進行操作,PostgreSQL內部定義了一些頁面的操作函數。頁面的相關操作包括頁面初始化、頁面添加、修復和刪除。供其他子模塊進行調用。這裏值得關注的是頁面修復與頁面批量刪除的操作函數。為了實現這兩個操作函數,PostgreSQL專門定義了一個數據結構itemldSortData,它為方便在這兩個函數中對元組項Item實現降序排序而定義。
[3]
- 參考資料
-
- 1. 劉鑫. MySQL和PostgreSQL的對比選擇[J]. 瀋陽工程學院學報(自然科學版), 2011, (2):171-173,177 .超星[引用日期2019-06-25]
- 2. 美)R.ALLen Wyke等著;信達工作室譯.PHP開發人員手冊[M]. 北京:人民郵電出版社,,2001.06
- 3. 魯笛, 向陽, 劉增寶. POSTGRESQL數據庫緩衝管理的分析與研究[J]. 計算機技術與發展, 2011, (12):41-44. .超星[引用日期2019-06-25]
- 4. 齊洋,原變青,劉穎,楊婷.基於Go與PostgreSQL的分佈式鎖的設計[J].電子技術與軟件工程,2022(13):255-258