PostgreSQL

PostgreSQL

特性非常齊全的自由軟件的對象
PostgreSQL支持大部分的SQL标準并且提供了很多其他現代特性,如複雜查詢、外鍵、觸發器、視圖、事務完整性、多版本并發控制等。PostgreSQL緩沖區管理子模塊内部的組織架構與實現機制,在PostgreSQL8.4.2緩沖區部分源碼的基礎上提出結論。結論指出了緩沖區管理模塊的實現機制,并通過對比分析了其内部本地緩沖區和共享緩沖區的優劣。[1]
    中文名:PostgreSQL 外文名: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提供了兩種可選模式。一種模式保證如果操作系統或硬件崩潰,則數據将保存到磁盤中,這種模式通常比大多數商業數據庫要慢,這是因為它使用了刷新(或同步)方法;另一種模式與第一種不同,它不提供數據保證,但它通常比商業數據庫運行得快。遺憾的是,還沒有一種折中的模式:既提供一定程度的數據安全性,又有較快的執行速度。今後的版本将會提供這種模式。

主要特點

PostgreSQL的主要優點如下:

1)維護者是PostgreSQL Global Development Group,首次發布于1989年6月。

2)操作系統支持WINDOWS、Linux、UNIX、MAC OS X、BSD。

3)從基本功能上來看,支持ACID、關聯完整性、數據庫事務、Unicode多國語言。

4)表和視圖方面,PostgreSQL支持臨時表,而物化視圖,可以使用PL/pgSQL、PL/Perl、PL/Python或其他過程語言的存儲過程和觸發器模拟。

5)索引方面,全面支持R-/R+tree索引、哈希索引、反向索引、部分索引、Expression索引、GiST、GIN(用來加速全文檢索),從8.3版本開始支持位圖索引。

6)其他對象上,支持數據域,支持存儲過程、觸發器、函數、外部調用、遊标7)數據表分區方面,支持4種分區,即範圍、哈希、混合、列表。

8)從事務的支持度上看,對事務的支持與MySQL相比,經曆了更為徹底的測試。

9)My ISAM表處理方式方面,MySQL對于無事務的MyISAM表,采用表鎖定,1個長時間運行的查詢很可能會阻礙對表的更新,而PostgreSQL不存在這樣的問題。

10)從存儲過程上看,PostgreSQL支持存儲過程。因為存儲過程的存在也避免了在網絡上大量原始的SQL語句的傳輸,這樣的優勢是顯而易見的。

11)用戶定義函數的擴展方面,PostgreSQL可以更方便地使用UDF(用戶定義函數)進行擴展。

PostgreSQL的應用劣勢如下:

1)最新版本和曆史版本不分離存儲,導緻清理老舊版本時需要做更多的掃描,代價比較大但一般的數據庫都有高峰期,如果合理安排VACUUM,這也不是很大的問題,而且在PostgreSQL9.0中VACUUM進一步被加強了。

2)在PostgreSQL中,由于索引完全沒有版本信息,不能實現Coverage index scan,即查詢隻掃描索引,不能直接從索引中返回所需的屬性,還需要訪問表,而Oracle與Innodb則可以。

存儲系統

存儲系統是PostgreSQL的最底層模塊,它向下通過操作系統接口訪問物理數據,向上為上層模塊提供存儲操作的接口和函數。PostgreSQL對物理數據的訪問和操作都是通過其存儲系統模塊來進行的。

PostgreSQL存儲系統是由以下幾個子模塊所構成的:

1)頁面管理子模塊:對PostgreSQL緩沖區頁面的組織結構進行定義以及提供頁面操作的方法。

2)緩沖區管理子模塊:管理PostgreSQL的緩沖區,包括本地緩沖區和共享緩沖區。

3)存儲設備管理子模塊:數據庫記錄是存儲在存儲介質上的,存儲設備管理子模塊将屏蔽不同物理存儲設備(塊設備,流設備)接口函數的差異,向上層緩沖區管理子模塊提供統一的訪問接口函數。

4)文件管理子模塊:一般的操作系統對一個進程允許打開的文件數是有限制的,而PostgreSQL服務器有些時候需要打開的文件數是很多的,因此PostgreSQL文件管理子模塊自身為了突破這個瓶頸,封裝了文件的讀寫操作,在這裡建立了一個LRU鍊表,通過一定的替換算法來對打開的文件進行管理,使得可以打開的文件數目不受操作系統平台的限制。

内存頁面

PostgreSQL内存頁面的默認大小是8kB。頁面的邏輯結構被定義成三個部分:頁首部(PageHeader)、元組記錄空間(ltem Space)以及特殊空間(Special Space)。

頁首部記錄了頁面的使用信息,這些信息由元組記錄空間和特殊空間的偏移量地址、頁面分布格式版本号和頁面的事物日志記載點等等所組成。

元組記錄空間是存儲元組信息的地方,在這裡面每個元組記錄被稱為一個ltem,Item由ltemld和元組數據組成,ltemld内部定義了元組在頁面中的偏移量、ltem指針的狀态以及元組項的比特位數長度。

特殊空間是為了頁面操作所需要的。為了其他模塊對頁面進行操作,PostgreSQL内部定義了一些頁面的操作函數。頁面的相關操作包括頁面初始化、頁面添加、修複和删除。供其他子模塊進行調用。這裡值得關注的是頁面修複與頁面批量删除的操作函數。為了實現這兩個操作函數,PostgreSQL專門定義了一個數據結構itemldSortData,它為方便在這兩個函數中對元組項Item實現降序排序而定義。

相關詞條

相關搜索

其它詞條