細化解析 PostgreSQL資料庫的與眾不同

2021-12-29 20:25:35 字數 1588 閱讀 7109

postgresql 可以說是最富特色的自由資料庫管理系統,甚至我們也可以說是最強大的自由軟體資料庫管理系統。

事實上, postgresql 的特性覆蓋了 sql-2/sql-92 和 sql-3/sql-99,首先,它包括了可以說是目前世界上最豐富的資料型別的支援,其中有些資料型別可以說連商業資料庫都不具備, 比如 ip 型別和幾何型別等;其次,postgresql 是全功能的自由軟體資料庫,很長時間以來,postgresql 是唯一支援事務、子查詢、多版本並行控制系統、資料完整性檢查等特性的唯一的一種自由軟體的資料庫管理系統。直到最近才有 inprise 的 interbase 以及 sap 等廠商將其原先專有軟體開放為自由軟體之後才打破了這個唯一。最後,postgresql擁有一支非常活躍的開發隊伍,目前的提交人員已經超過三十人, 而且在許多黑客的努力下,postgresql 的質量日益提高,也從另外乙個側面上增加了人們使用 postgresql 的信心,畢竟資料庫管理系統不能象桌面作業系統那樣 一天宕一次還讓人覺得挺滿意 :-p。

從技術角度來講,postgresql 採用的是比較經典的 c/s (client/server)結構,也就是乙個客戶端對應乙個伺服器端守護程序的模式, 這個守護程序分析客戶端來的查詢請求,生成規劃樹,進行資料檢索並最終把結果格式化輸出後返回給客戶端。為了便於客戶端的程式的編寫, 由資料庫伺服器提供了統一的客戶端 c 介面。而不同的客戶端介面都是源自這個 c 介面,比如 odbc,jdbc,python,perl ,tcl,c/c++,esql 等, 同時也要指出的是,postgresql 對介面的支援也是非常豐富的,幾乎支援所有型別的資料庫客戶端介面。這一點也可以說是 postgresql 一大優點。

說完優點,不能不說幾句缺點,不能因為是自由軟體而偏袒 postgresql,從 postgres 開始,postgresql 就經受了多次變化。

首先,早期的 postgresql 繼承了幾乎所有 ingres, postgres, postgres95 的問題:過於學院味,因為首先它的目的是資料庫研究,因此不論在穩定性, 效能還是使用方便方面,長期以來一直沒有得到重視,直到 postgresql 專案開始以後,情況才越來越好,目前,postgresql 已經完全可以勝任任何中上規模範圍內的應用範圍的業務。目前有報道的生產資料庫的大小已經有 tb 級的資料量,已經逼近 32 位計算的極限。 不過學院味也給 postgresql 帶來乙個意想不到的好處:大概因為各大學的軟硬體環境差異太大的緣故,它是目前支援平台最多的資料庫管理系統的一種, 所支援的平台多達十幾種,包括不同的系統,不同的硬體體系。至今,它仍然保持著支援平台最多的資料庫管理系統的稱號。

其次,postgresql 的確還欠缺一些比較高階的資料庫管理系統需要的特性,比如聯機熱備份,資料庫集群,更優良的管理工具和更加自動化的系統優化功能 等提高資料庫效能的機制等。 但是,話說回來,postgresql 擁有極其強大的擴充套件能力,你可以很容易地擴充套件資料型別,內部函式,聚集,操作符等等,而且,別忘了,你擁有所有的源程式, 理論上你可以做任何你可以做的事情。因此,很多缺點,在轉瞬之間就會消失也是很正常的。

總而言之,postgresql的特性已經完全可以滿足絕大部分使用者的需要,而且其質量和特性仍然在日新月異地進步著,所以, 我們有理由相信在不遠的將來,postgresql 肯定能夠成為一種優秀的,自由的,商業資料庫的替代產品。

三種ORACLE鎖機制細化解析

oracle鎖機制主要是為了對併發操作進行控制,來保證資料的一致性和準確性。下面我們就來學習oracle鎖機制。oracle rdbms的封鎖型別可分為如下三類 內部級封鎖 內部級封鎖是用於保護oracle內部結構,由系統內部實現,使用者不能訪問,因此我們不必對此做過多的了解。ddl級封鎖 字典 語...

leetcode 動態規劃入門問題細化解析(一)

1.最小花費爬樓梯 大佬的題解,跟官方解答思路一樣 自己加了注釋內容 class solution return min c1,c2 比較到n 1和n 2花費體力的值 這個大佬的題解更好理解 class solution 2.打家劫舍 具體分析看題解第二位大佬 靈魂畫手 的題解 思路標籤 動態規劃 ...

fastjson 定製化解析

最近寫了乙個簡單的定製解析。fastjson 解析 map key value時有bug.public static class kvpair public kvpair k key,v value public k getkey public void setkey k key public v ...