postgresql數(shù)據(jù)庫(kù)雙活機(jī)制
1、PostgreSQL開(kāi)源免費(fèi)企業(yè)級(jí)數(shù)據(jù)庫(kù)用著比較爽的地方有哪些?
1),PostgreSQL是通用型數(shù)據(jù)庫(kù)。PG有著豐富的數(shù)據(jù)類(lèi)型(數(shù)值、字符、時(shí)間、布爾、貨幣、枚舉、網(wǎng)絡(luò)地址、JSONB等等)和索引類(lèi)型( B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN等 )。可以存儲(chǔ)和計(jì)算大多數(shù)場(chǎng)景的業(yè)務(wù)數(shù)據(jù),如 ERP、交易系統(tǒng)、財(cái)務(wù)系統(tǒng)涉及資金、客戶(hù)等信息,數(shù)據(jù)不能丟失且業(yè)務(wù)邏輯復(fù)雜,選擇 PostgreSQL 作為數(shù)據(jù)底層存儲(chǔ),一是可以幫助您在數(shù)據(jù)一致性前提下提供高可用性,二是可以用簡(jiǎn)單的編程實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯 。適合各種OLTP和部分OLAP場(chǎng)景。
2),PostgreSQL數(shù)據(jù)庫(kù)包含許多第三方插件。
如PostGIS等可以直接在數(shù)據(jù)庫(kù)里進(jìn)行地理位置相關(guān)的gis類(lèi)存儲(chǔ)和運(yùn)算(LBS地理位置相關(guān)業(yè)務(wù)等O2O場(chǎng)景),其他的插件如Pg_stat_statements、uuid-ossp、pg_trgm、btree-gist插件、 pgcrypto加密等插件 。
3),中小型企業(yè)快速搭建 數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)分析平臺(tái)(TB級(jí)別)
PostgreSQL 提供豐富的數(shù)據(jù)類(lèi)型和強(qiáng)大的計(jì)算能力,能夠幫助您更簡(jiǎn)單搭建數(shù)據(jù)庫(kù)倉(cāng)庫(kù)或大數(shù)據(jù)分析平臺(tái),為企業(yè)運(yùn)營(yíng)加分。
4),冷熱分離
針對(duì)流水類(lèi)的大表,PG可以使用分區(qū)表,線(xiàn)上保留熱數(shù)據(jù), 歷史 數(shù)據(jù)存放在分區(qū)表里或者OSS等冷數(shù)據(jù)平臺(tái),冷熱分離。
5),公有云支持度高如阿里云、騰訊云、華為云等公有云都有對(duì)應(yīng)的RDS-PG產(chǎn)品,開(kāi)箱即用,并提供技術(shù)支持。
OLTP:事務(wù)處理是PostgreSQL的本行
OLAP:ANSI SQL兼容,窗口函數(shù),CTE,CUBE等高級(jí)分析功能,任意語(yǔ)言寫(xiě)UDF,citus分布式插件
流處理:PipelineDB擴(kuò)展,Notify-Listen,物化視圖,規(guī)則系統(tǒng),靈活的存儲(chǔ)過(guò)程與函數(shù)編寫(xiě)
時(shí)序數(shù)據(jù):timescaledb時(shí)序數(shù)據(jù)庫(kù)插件,分區(qū)表,BRIN索引
空間數(shù)據(jù):PostGIS擴(kuò)展(殺手锏),內(nèi)建的幾何類(lèi)型支持,GiST索引。
搜索索引:全文搜索索引足以應(yīng)對(duì)簡(jiǎn)單場(chǎng)景;豐富的索引類(lèi)型,支持函數(shù)索引,條件索引
NoSQL:JSON,JSONB,XML,HStore原生支持,至NoSQL數(shù)據(jù)庫(kù)的外部數(shù)據(jù)包裝器
數(shù)據(jù)倉(cāng)庫(kù):能平滑遷移至同屬Pg生態(tài)的GreenPlum,DeepGreen,HAWK等,使用FDW進(jìn)行ETL
2、postgresql是什么數(shù)據(jù)庫(kù)?請(qǐng)?jiān)斀庖幌?謝謝
分類(lèi): 電腦/網(wǎng)絡(luò) >> 程序設(shè)計(jì) >> 其他編程語(yǔ)言解析:
PostgreSQL 是一種非常復(fù)雜的對(duì)象-關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(ORDBMS), 也是目前功能最強(qiáng)大,特性最豐富和最復(fù)雜的自由軟件數(shù)據(jù)庫(kù)系統(tǒng)。有些特性甚至連商業(yè)數(shù)據(jù)庫(kù)都不具備。這個(gè)起源于伯克利(BSD)的數(shù)據(jù)庫(kù)研究計(jì)劃目前已經(jīng)衍生成一項(xiàng)國(guó)際開(kāi)發(fā)項(xiàng)目, 并且有非常廣泛的用戶(hù)。
PostgreSQL 可以說(shuō)是最富特色的自由數(shù)據(jù)庫(kù)管理系統(tǒng),甚至我們也可以說(shuō)是最強(qiáng)大的自由軟件數(shù)據(jù)庫(kù)管理系統(tǒng)。事實(shí)上, PostgreSQL 的特性覆蓋了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以說(shuō)是目前世界上最豐富的數(shù)據(jù)類(lèi)型的支持,其中有些數(shù)據(jù)類(lèi)型可以說(shuō)連商業(yè)數(shù)據(jù)庫(kù)都不具備, 比如 IP 類(lèi)型和幾何類(lèi)型等;其次,PostgreSQL 是全功能的自由軟件數(shù)據(jù)庫(kù),很長(zhǎng)時(shí)間以來(lái),PostgreSQL 是唯一支持事務(wù)、子查詢(xún)、多版本并行控制系統(tǒng)、數(shù)據(jù)完整性檢查等特性的唯一的一種自由軟件的數(shù)據(jù)庫(kù)管理系統(tǒng)。直到最近才有 Inprise 的 InterBase 以及 SAP 等廠商將其原先專(zhuān)有軟件開(kāi)放為自由軟件之后才打破了這個(gè)唯一。
3、MySQL與PostgreSQL比較 哪個(gè)數(shù)據(jù)庫(kù)更好
特性 MySQL PostgreSQL實(shí)例 通過(guò)執(zhí)行 MySQL 命令(mysqld)啟動(dòng)實(shí)例。一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫(kù)。一臺(tái)服務(wù)器可以運(yùn)行多個(gè) mysqld 實(shí)例。一個(gè)實(shí)例管理器可以監(jiān)視 mysqld 的各個(gè)實(shí)例。
通過(guò)執(zhí)行 Postmaster 進(jìn)程(pg_ctl)啟動(dòng)實(shí)例。一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫(kù),這些數(shù)據(jù)庫(kù)組成一個(gè)集群。集群是磁盤(pán)上的一個(gè)區(qū)域,這個(gè)區(qū)域在安裝時(shí)初始化并由一個(gè)目錄組成,所有數(shù)據(jù)都存儲(chǔ)在這個(gè)目錄中。使用 initdb 創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù)。一臺(tái)機(jī)器上可以啟動(dòng)多個(gè)實(shí)例。
數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)是命名的對(duì)象集合,是與實(shí)例中的其他數(shù)據(jù)庫(kù)分離的實(shí)體。一個(gè) MySQL 實(shí)例中的所有數(shù)據(jù)庫(kù)共享同一個(gè)系統(tǒng)編目。 數(shù)據(jù)庫(kù)是命名的對(duì)象集合,每個(gè)數(shù)據(jù)庫(kù)是與其他數(shù)據(jù)庫(kù)分離的實(shí)體。每個(gè)數(shù)據(jù)庫(kù)有自己的系統(tǒng)編目,但是所有數(shù)據(jù)庫(kù)共享 pg_databases。
數(shù)據(jù)緩沖區(qū) 通過(guò) innodb_buffer_pool_size 配置參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū)。這個(gè)參數(shù)是內(nèi)存緩沖區(qū)的字節(jié)數(shù),InnoDB 使用這個(gè)緩沖區(qū)來(lái)緩存表的數(shù)據(jù)和索引。在專(zhuān)用的數(shù)據(jù)庫(kù)服務(wù)器上,這個(gè)參數(shù)最高可以設(shè)置為機(jī)器物理內(nèi)存量的 80%。 Shared_buffers 緩存。在默認(rèn)情況下分配 64 個(gè)緩沖區(qū)。默認(rèn)的塊大小是 8K。可以通過(guò)設(shè)置 postgresql.conf 文件中的 shared_buffers 參數(shù)來(lái)更新緩沖區(qū)緩存。
數(shù)據(jù)庫(kù)連接 客戶(hù)機(jī)使用 CONNECT 或 USE 語(yǔ)句連接數(shù)據(jù)庫(kù),這時(shí)要指定數(shù)據(jù)庫(kù)名,還可以指定用戶(hù) id 和密碼。使用角色管理數(shù)據(jù)庫(kù)中的用戶(hù)和用戶(hù)組。 客戶(hù)機(jī)使用 connect 語(yǔ)句連接數(shù)據(jù)庫(kù),這時(shí)要指定數(shù)據(jù)庫(kù)名,還可以指定用戶(hù) id 和密碼。使用角色管理數(shù)據(jù)庫(kù)中的用戶(hù)和用戶(hù)組。
身份驗(yàn)證 MySQL 在數(shù)據(jù)庫(kù)級(jí)管理身份驗(yàn)證。 基本只支持密碼認(rèn)證。 PostgreSQL 支持豐富的認(rèn)證方法:信任認(rèn)證、口令認(rèn)證、Kerberos 認(rèn)證、基于 Ident 的認(rèn)證、LDAP 認(rèn)證、PAM 認(rèn)證
加密 可以在表級(jí)指定密碼來(lái)對(duì)數(shù)據(jù)進(jìn)行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數(shù)對(duì)列數(shù)據(jù)進(jìn)行加密和解密。可以通過(guò) SSL 連接實(shí)現(xiàn)網(wǎng)絡(luò)加密。 可以使用 pgcrypto 庫(kù)中的函數(shù)對(duì)列進(jìn)行加密/解密。可以通過(guò) SSL 連接實(shí)現(xiàn)網(wǎng)絡(luò)加密。
審計(jì) 可以對(duì) querylog 執(zhí)行 grep。 可以在表上使用 PL/pgSQL 觸發(fā)器來(lái)進(jìn)行審計(jì)。
查詢(xún)解釋 使用 EXPLAIN 命令查看查詢(xún)的解釋計(jì)劃。 使用 EXPLAIN 命令查看查詢(xún)的解釋計(jì)劃。
備份、恢復(fù)和日志 InnoDB 使用寫(xiě)前(write-ahead)日志記錄。支持在線(xiàn)和離線(xiàn)完全備份以及崩潰和事務(wù)恢復(fù)。需要第三方軟件才能支持熱備份。 在數(shù)據(jù)目錄的一個(gè)子目錄中維護(hù)寫(xiě)前日志。支持在線(xiàn)和離線(xiàn)完全備份以及崩潰、時(shí)間點(diǎn)和事務(wù)恢復(fù)。 可以支持熱備份。
JDBC 驅(qū)動(dòng)程序 可以從 參考資料 下載 JDBC 驅(qū)動(dòng)程序。 可以從 參考資料 下載 JDBC 驅(qū)動(dòng)程序。
表類(lèi)型 取決于存儲(chǔ)引擎。例如,NDB 存儲(chǔ)引擎支持分區(qū)表,內(nèi)存引擎支持內(nèi)存表。 支持臨時(shí)表、常規(guī)表以及范圍和列表類(lèi)型的分區(qū)表。不支持哈希分區(qū)表。 由于PostgreSQL的表分區(qū)是通過(guò)表繼承和規(guī)則系統(tǒng)完成了,所以可以實(shí)現(xiàn)更復(fù)雜的分區(qū)方式。
索引類(lèi)型 取決于存儲(chǔ)引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-樹(shù)、哈希、R-樹(shù)和 Gist 索引。
約束 支持主鍵、外鍵、惟一和非空約束。對(duì)檢查約束進(jìn)行解析,但是不強(qiáng)制實(shí)施。 支持主鍵、外鍵、惟一、非空和檢查約束。
存儲(chǔ)過(guò)程和用戶(hù)定義函數(shù) 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語(yǔ)句。存儲(chǔ)過(guò)程可以用 SQL 和 C++ 編寫(xiě)。用戶(hù)定義函數(shù)可以用 SQL、C 和 C++ 編寫(xiě)。 沒(méi)有單獨(dú)的存儲(chǔ)過(guò)程,都是通過(guò)函數(shù)實(shí)現(xiàn)的。用戶(hù)定義函數(shù)可以用 PL/pgSQL(專(zhuān)用的過(guò)程語(yǔ)言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫(xiě)。
觸發(fā)器 支持行前觸發(fā)器、行后觸發(fā)器和語(yǔ)句觸發(fā)器,觸發(fā)器語(yǔ)句用過(guò)程語(yǔ)言復(fù)合語(yǔ)句編寫(xiě)。 支持行前觸發(fā)器、行后觸發(fā)器和語(yǔ)句觸發(fā)器,觸發(fā)器過(guò)程用 C 編寫(xiě)。
系統(tǒng)配置文件 my.conf Postgresql.conf
數(shù)據(jù)庫(kù)配置 my.conf Postgresql.conf
客戶(hù)機(jī)連接文件 my.conf pg_hba.conf
XML 支持 有限的 XML 支持。 有限的 XML 支持。
數(shù)據(jù)訪(fǎng)問(wèn)和管理服務(wù)器 OPTIMIZE TABLE —— 回收未使用的空間并消除數(shù)據(jù)文件的碎片
myisamchk -analyze —— 更新查詢(xún)優(yōu)化器所使用的統(tǒng)計(jì)數(shù)據(jù)(MyISAM 存儲(chǔ)引擎)
mysql —— 命令行工具
MySQL Administrator —— 客戶(hù)機(jī) GUI 工具 Vacuum —— 回收未使用的空間
Analyze —— 更新查詢(xún)優(yōu)化器所使用的統(tǒng)計(jì)數(shù)據(jù)
psql —— 命令行工具
pgAdmin —— 客戶(hù)機(jī) GUI 工具
并發(fā)控制 支持表級(jí)和行級(jí)鎖。InnoDB 存儲(chǔ)引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語(yǔ)句在事務(wù)級(jí)設(shè)置隔離級(jí)別。 支持表級(jí)和行級(jí)鎖。支持的 ANSI 隔離級(jí)別是 Read Committed(默認(rèn) —— 能看到查詢(xún)啟動(dòng)時(shí)數(shù)據(jù)庫(kù)的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務(wù)啟動(dòng)之前提交的結(jié)果)。使用 SET TRANSACTION 語(yǔ)句在事務(wù)級(jí)設(shè)置隔離級(jí)別。使用 SET SESSION 在會(huì)話(huà)級(jí)進(jìn)行設(shè)置。
MySQL相對(duì)于PostgreSQL的劣勢(shì):
MySQL
PostgreSQL
最重要的引擎InnoDB很早就由Oracle公司控制。目前整個(gè)MySQL數(shù)據(jù)庫(kù)都由Oracle控制。
BSD協(xié)議,沒(méi)有被大公司壟斷。
對(duì)復(fù)雜查詢(xún)的處理較弱,查詢(xún)優(yōu)化器不夠成熟
很強(qiáng)大的查詢(xún)優(yōu)化器,支持很復(fù)雜的查詢(xún)處理。
只有一種表連接類(lèi)型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。
都支持
性能優(yōu)化工具與度量信息不足
提供了一些性能視圖,可以方便的看到發(fā)生在一個(gè)表和索引上的select、delete、update、insert統(tǒng)計(jì)信息,也可以看到cache命中率。網(wǎng)上有一個(gè)開(kāi)源的pgstatspack工具。
InnoDB的表和索引都是按相同的方式存儲(chǔ)。也就是說(shuō)表都是索引組織表。這一般要求主鍵不能太長(zhǎng)而且插入時(shí)的主鍵最好是按順序遞增,否則對(duì)性能有很大影響。
不存在這個(gè)問(wèn)題。
大部分查詢(xún)只能使用表上的單一索引;在某些情況下,會(huì)存在使用多個(gè)索引的查詢(xún),但是查詢(xún)優(yōu)化器通常會(huì)低估其成本,它們常常比表掃描還要慢。
不存在這個(gè)問(wèn)題
表增加列,基本上是重建表和索引,會(huì)花很長(zhǎng)時(shí)間。
表增加列,只是在數(shù)據(jù)字典中增加表定義,不會(huì)重建表
存儲(chǔ)過(guò)程與觸發(fā)器的功能有限。可用來(lái)編寫(xiě)存儲(chǔ)過(guò)程、觸發(fā)器、計(jì)劃事件以及存儲(chǔ)函數(shù)的語(yǔ)言功能較弱
除支持pl/pgsql寫(xiě)存儲(chǔ)過(guò)程,還支持perl、python、Tcl類(lèi)型的存儲(chǔ)過(guò)程:pl/perl,pl/python,pl/tcl。
也支持用C語(yǔ)言寫(xiě)存儲(chǔ)過(guò)程。
不支持Sequence。
支持
不支持函數(shù)索引,只能在創(chuàng)建基于具體列的索引。
不支持物化視圖。
支持函數(shù)索引,同時(shí)還支持部分?jǐn)?shù)據(jù)索引,通過(guò)規(guī)則系統(tǒng)可以實(shí)現(xiàn)物化視圖的功能。
執(zhí)行計(jì)劃并不是全局共享的, 僅僅在連接內(nèi)部是共享的。
執(zhí)行計(jì)劃共享
MySQL支持的SQL語(yǔ)法(ANSI SQL標(biāo)準(zhǔn))的很小一部分。不支持遞歸查詢(xún)、通用表表達(dá)式(Oracle的with 語(yǔ)句)或者窗口函數(shù)(分析函數(shù))。
都 支持
不支持用戶(hù)自定義類(lèi)型或域(domain)
支持。
對(duì)于時(shí)間、日期、間隔等時(shí)間類(lèi)型沒(méi)有秒以下級(jí)別的存儲(chǔ)類(lèi)型
可以精確到秒以下。
身份驗(yàn)證功能是完全內(nèi)置的,不支持操作系統(tǒng)認(rèn)證、PAM認(rèn)證,不支持LDAP以及其它類(lèi)似的外部身份驗(yàn)證功能。
支持OS認(rèn)證、Kerberos 認(rèn)證 、Ident 的認(rèn)證、LDAP 認(rèn)證、PAM 認(rèn)證
不支持database link。有一種叫做Federated的存儲(chǔ)引擎可以作為一個(gè)中轉(zhuǎn)將查詢(xún)語(yǔ)句傳遞到遠(yuǎn)程服務(wù)器的一個(gè)表上,不過(guò),它功能很粗糙并且漏洞很多
有dblink,同時(shí)還有一個(gè)dbi-link的東西,可以連接到oracle和mysql上。
Mysql Cluster可能與你的想象有較大差異。開(kāi)源的cluster軟件較少。
復(fù)制(Replication)功能是異步的,并且有很大的局限性.例如,它是單線(xiàn)程的(single-threaded),因此一個(gè)處理能力更強(qiáng)的Slave的恢復(fù)速度也很難跟上處理能力相對(duì)較慢的Master.
有豐富的開(kāi)源cluster軟件支持。
explain看執(zhí)行計(jì)劃的結(jié)果簡(jiǎn)單。
explain返回豐富的信息。
類(lèi)似于ALTER TABLE或CREATE TABLE一類(lèi)的操作都是非事務(wù)性的.它們會(huì)提交未提交的事務(wù),并且不能回滾也不能做災(zāi)難恢復(fù)
DDL也是有事務(wù)的。
PostgreSQL主要優(yōu)勢(shì):
1. PostgreSQL完全免費(fèi),而且是BSD協(xié)議,如果你把PostgreSQL改一改,然后再拿去賣(mài)錢(qián),也沒(méi)有人管你,這一點(diǎn)很重要,這表明了PostgreSQL數(shù)據(jù)庫(kù)不會(huì)被其它公司控制。oracle數(shù)據(jù)庫(kù)不用說(shuō)了,是商業(yè)數(shù)據(jù)庫(kù),不開(kāi)放。而MySQL數(shù)據(jù)庫(kù)雖然是開(kāi)源的,但現(xiàn)在隨著SUN被oracle公司收購(gòu),現(xiàn)在基本上被oracle公司控制,其實(shí)在SUN被收購(gòu)之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的數(shù)據(jù)都是放在InnoDB引擎中的,反正我們公司都是這樣的。所以如果MySQL的市場(chǎng)范圍與oracle數(shù)據(jù)庫(kù)的市場(chǎng)范圍沖突時(shí),oracle公司必定會(huì)犧牲MySQL,這是毫無(wú)疑問(wèn)的。
2. 與PostgreSQl配合的開(kāi)源軟件很多,有很多分布式集群軟件,如pgpool、pgcluster、slony、plploxy等等,很容易做讀寫(xiě)分離、負(fù)載均衡、數(shù)據(jù)水平拆分等方案,而這在MySQL下則比較困難。
3. PostgreSQL源代碼寫(xiě)的很清晰,易讀性比MySQL強(qiáng)太多了,懷疑MySQL的源代碼被混淆過(guò)。所以很多公司都是基本PostgreSQL做二次開(kāi)發(fā)的。
4. PostgreSQL在很多方面都比MySQL強(qiáng),如復(fù)雜SQL的執(zhí)行、存儲(chǔ)過(guò)程、觸發(fā)器、索引。同時(shí)PostgreSQL是多進(jìn)程的,而MySQL是線(xiàn)程的,雖然并發(fā)不高時(shí),MySQL處理速度快,但當(dāng)并發(fā)高的時(shí)候,對(duì)于現(xiàn)在多核的單臺(tái)機(jī)器上,MySQL的總體處理性能不如PostgreSQL,原因是MySQL的線(xiàn)程無(wú)法充分利用CPU的能力。
目前只想到這些,以后想到再添加,歡迎大家拍磚。
PostgreSQL與oracle或InnoDB的多版本實(shí)現(xiàn)的差別
PostgreSQL與oracle或InnoDB的多版本實(shí)現(xiàn)最大的區(qū)別在于最新版本和歷史版本是否分離存儲(chǔ),PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分離了數(shù)據(jù),索引本身沒(méi)有分開(kāi)。
PostgreSQL的主要優(yōu)勢(shì)在于:
1. PostgreSQL沒(méi)有回滾段,而oracle與innodb有回滾段,oracle與Innodb都有回滾段。對(duì)于oracle與Innodb來(lái)說(shuō),回滾段是非常重要的,回滾段損壞,會(huì)導(dǎo)致數(shù)據(jù)丟失,甚至數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)的嚴(yán)重問(wèn)題。另由于PostgreSQL沒(méi)有回滾段,舊數(shù)據(jù)都是記錄在原先的文件中,所以當(dāng)數(shù)據(jù)庫(kù)異常crash后,恢復(fù)時(shí),不會(huì)象oracle與Innodb數(shù)據(jù)庫(kù)那樣進(jìn)行那么復(fù)雜的恢復(fù),因?yàn)閛racle與Innodb恢復(fù)時(shí)同步需要redo和undo。所以PostgreSQL數(shù)據(jù)庫(kù)在出現(xiàn)異常crash后,數(shù)據(jù)庫(kù)起不來(lái)的幾率要比oracle和mysql小一些。
2. 由于舊的數(shù)據(jù)是直接記錄在數(shù)據(jù)文件中,而不是回滾段中,所以不會(huì)象oracle那樣經(jīng)常報(bào)ora-01555錯(cuò)誤。
3. 回滾可以很快完成,因?yàn)榛貪L并不刪除數(shù)據(jù),而oracle與Innodb,回滾時(shí)很復(fù)雜,在事務(wù)回滾時(shí)必須清理該事務(wù)所進(jìn)行的修改,插入的記錄要?jiǎng)h除,更新的記錄要更新回來(lái)(見(jiàn)row_undo函數(shù)),同時(shí)回滾的過(guò)程也會(huì)再次產(chǎn)生大量的redo日志。
4. WAL日志要比oracle和Innodb簡(jiǎn)單,對(duì)于oracle不僅需要記錄數(shù)據(jù)文件的變化,還要記錄回滾段的變化。
PostgreSQL的多版本的主要劣勢(shì)在于:
1、最新版本和歷史版本不分離存儲(chǔ),導(dǎo)致清理老舊版本需要作更多的掃描,代價(jià)比較大,但一般的數(shù)據(jù)庫(kù)都有高峰期,如果我們合理安排VACUUM,這也不是很大的問(wèn)題,而且在PostgreSQL9.0中VACUUM進(jìn)一步被加強(qiáng)了。
2、由于索引中完全沒(méi)有版本信息,不能實(shí)現(xiàn)Coverage index scan,即查詢(xún)只掃描索引,直接從索引中返回所需的屬性,還需要訪(fǎng)問(wèn)表。而oracle與Innodb則可以;
進(jìn)程模式與線(xiàn)程模式的對(duì)比
PostgreSQL和oracle是進(jìn)程模式,MySQL是線(xiàn)程模式。
進(jìn)程模式對(duì)多CPU利用率比較高。
進(jìn)程模式共享數(shù)據(jù)需要用到共享內(nèi)存,而線(xiàn)程模式數(shù)據(jù)本身就是在進(jìn)程空間內(nèi)都是共享的,不同線(xiàn)程訪(fǎng)問(wèn)只需要控制好線(xiàn)程之間的同步。
線(xiàn)程模式對(duì)資源消耗比較少。
所以MySQL能支持遠(yuǎn)比oracle多的更多的連接。
對(duì)于PostgreSQL的來(lái)說(shuō),如果不使用連接池軟件,也存在這個(gè)問(wèn)題,但PostgreSQL中有優(yōu)秀的連接池軟件軟件,如pgbouncer和pgpool,所以通過(guò)連接池也可以支持很多的連接。 沒(méi)有哪個(gè)好哪個(gè)不好,,看使用場(chǎng)景決定用哪個(gè)
4、看大數(shù)據(jù)最大技術(shù)難關(guān)之模糊檢索,PostgreSQL如何攻克
大數(shù)據(jù)正在向我們奔來(lái)。盡管業(yè)務(wù)場(chǎng)景不會(huì)完全相同,但在其中一個(gè)最典型場(chǎng)景——模糊檢索中,技術(shù)需求卻出奇的一致。比如說(shuō):
物聯(lián)網(wǎng),往往會(huì)產(chǎn)生大量的數(shù)據(jù),除了數(shù)字?jǐn)?shù)據(jù),還有字符串類(lèi)的數(shù)據(jù),例如條形碼,車(chē)牌,手機(jī)號(hào),郵箱,姓名等。假設(shè)用戶(hù)需要在大量的傳感數(shù)據(jù)中進(jìn)行模糊檢索,甚至規(guī)則表達(dá)式匹配,有什么高效的方法呢?
醫(yī)藥,市面上發(fā)現(xiàn)了一批藥品可能有問(wèn)題,需要對(duì)藥品條碼進(jìn)行規(guī)則表達(dá)式查找,找出復(fù)合條件的藥品流向。但怎么才能在如此復(fù)雜的系統(tǒng)中,用高效方法來(lái)實(shí)現(xiàn)?
公安,偵查行動(dòng)時(shí),有可能需要線(xiàn)索的檢索。如用戶(hù)提供的殘缺的電話(huà)號(hào)碼,郵箱,車(chē)牌,IP地址,QQ號(hào)碼,微信號(hào)碼等進(jìn)行交叉搜索,根據(jù)這些信息加上時(shí)間的疊加,模糊匹配和關(guān)聯(lián),最終找出罪犯。但這個(gè)流程,可有高效方法?
相同的需求還有很多。幾乎每一個(gè)模糊匹配的場(chǎng)景下,都需要正則表達(dá)式匹配,這和人臉拼圖有點(diǎn)類(lèi)似,我們已經(jīng)看到強(qiáng)烈的需求已經(jīng)產(chǎn)生。但技術(shù)方面,要怎么做更好?
在我看來(lái):正則匹配和模糊匹配通常是搜索引擎的特長(zhǎng),但是如果你使用的是PostgreSQL數(shù)據(jù)庫(kù)照樣能實(shí)現(xiàn),并且性能不賴(lài),加上分布式方案
(譬如 plproxy, pg_shard, fdw shard, pg-xc, pg-xl,
greenplum),處理百億以上數(shù)據(jù)量的正則匹配和模糊匹配效果杠杠的,同時(shí)還不失數(shù)據(jù)庫(kù)固有的功能,絕對(duì)是一舉多得。
首先對(duì)應(yīng)用場(chǎng)景進(jìn)行一下分類(lèi),以及現(xiàn)有技術(shù)下能使用的優(yōu)化手段。
.1. 帶前綴的模糊查詢(xún),例如 like 'ABC%',在PG中也可以寫(xiě)成 ~ '^ABC'
可以使用btree索引優(yōu)化,或者拆列用多列索引疊加bit and或bit or進(jìn)行優(yōu)化(只適合固定長(zhǎng)度的端字符串,例如char(8))。
.2. 帶后綴的模糊查詢(xún),例如 like '%ABC',在PG中也可以寫(xiě)成 ~ 'ABC$'
可以使用reverse函數(shù)btree索引,或者拆列用多列索引疊加bit and或bit or進(jìn)行優(yōu)化(只適合固定長(zhǎng)度的端字符串,例如char(8))。
.3. 不帶前綴和后綴的模糊查詢(xún),例如 like '%AB_C%',在PG中也可以寫(xiě)成 ~ 'AB.C'
可以使用pg_trgm的gin索引,或者拆列用多列索引疊加bit and或bit or進(jìn)行優(yōu)化(只適合固定長(zhǎng)度的端字符串,例如char(8))。
.4. 正則表達(dá)式查詢(xún),例如 ~ '[\d]+def1.?[a|b|0|8]{1,3}'
可以使用pg_trgm的gin索引,或者拆列用多列索引疊加bit and或bit or進(jìn)行優(yōu)化(只適合固定長(zhǎng)度的端字符串,例如char(8))。
PostgreSQL pg_trgm插件自從9.1開(kāi)始支持模糊查詢(xún)使用索引,從9.3開(kāi)始支持規(guī)則表達(dá)式查詢(xún)使用索引,大大提高了PostgreSQL在刑偵方面的能力。
代碼見(jiàn) https://github.com/postgrespro/pg_trgm_pro
pg_trgm插件的原理,將字符串前加2個(gè)空格,后加1個(gè)空格,組成一個(gè)新的字符串,并將這個(gè)新的字符串按照每3個(gè)相鄰的字符拆分成多個(gè)token。
當(dāng)使用規(guī)則表達(dá)式或者模糊查詢(xún)進(jìn)行匹配時(shí),會(huì)檢索出他們的近似度,再進(jìn)行filter。
5、postgresql是什么數(shù)據(jù)庫(kù)
postgresql是功能強(qiáng)大的開(kāi)源數(shù)據(jù)庫(kù)。
postgresql數(shù)據(jù)庫(kù)是功能強(qiáng)大的開(kāi)源數(shù)據(jù)庫(kù),它支持豐富的數(shù)據(jù)類(lèi)型(如JSON和JSONB類(lèi)型、數(shù)組類(lèi)型)和自定義類(lèi)型。
PostgreSQL數(shù)據(jù)庫(kù)提供了豐富的接口,可以很方便地?cái)U(kuò)展它的功能,如可以在GiST框架下實(shí)現(xiàn)自己的索引類(lèi)型,支持使用C語(yǔ)言寫(xiě)自定義函數(shù)、觸發(fā)器,也支持使用流行的編程語(yǔ)言寫(xiě)自定義函數(shù)。
PostgreSQL數(shù)據(jù)庫(kù)優(yōu)點(diǎn)
1、對(duì)超許可數(shù)量軟件使用的天然免疫力
對(duì)一些商業(yè)性質(zhì)的數(shù)據(jù)庫(kù)銷(xiāo)售商來(lái)說(shuō),超許可數(shù)量的軟件使用是第一位的問(wèn)題。而使用PostgreSQL,因?yàn)闆](méi)有任何授權(quán)的費(fèi)用是,也就沒(méi)有任何人可以起訴您違反授權(quán)協(xié)議違規(guī)使用軟件。
2、比商業(yè)服務(wù)商更好的支持
除了有一般商業(yè)公司的支持外,我們還有由PostgreSQL專(zhuān)業(yè)人員和熱心的愛(ài)好者組成的各種社區(qū),用戶(hù)可以向他們尋求支持和幫助。
3、員工成本的顯著降低
相對(duì)于市場(chǎng)上大型的商業(yè)私有數(shù)據(jù)庫(kù)軟件,我們的系統(tǒng)在設(shè)計(jì)和開(kāi)發(fā)時(shí)已考慮僅需少量的維護(hù)和優(yōu)化,同時(shí)仍保持所有功能正常、穩(wěn)定和性能正常。不僅如此,我們的培訓(xùn)過(guò)程相對(duì)于那些商業(yè)私有數(shù)據(jù)庫(kù)供應(yīng)商來(lái)說(shuō),總體來(lái)說(shuō)有更好的性?xún)r(jià)比、更容易管理和更接近真實(shí)的使用場(chǎng)景。
4、享有盛名的可靠性和穩(wěn)定性
與很多商業(yè)私有數(shù)據(jù)庫(kù)不一樣的是,對(duì)很多公司特別常見(jiàn)的是,PostgreSQL在幾年的運(yùn)行過(guò)程中幾乎未出現(xiàn)哪怕是一次的宕機(jī)情況,即使是一次,它就是這樣穩(wěn)定地工作著。
5、擴(kuò)展性
所有PostgreSQL的源代碼對(duì)所有人都是可以免費(fèi)獲得的。如果您的公司員工需要定制或是給PostgreSQL增加一些功能,他們只需做很少的改動(dòng)工作,也沒(méi)有額外的成本。全球PostgreSQL社區(qū)的專(zhuān)業(yè)人員和熱心的愛(ài)好者也在積極地?cái)U(kuò)展PostgreSQL的功能。
PostgreSQL是一款高級(jí)的企業(yè)開(kāi)源關(guān)系數(shù)據(jù)庫(kù),支持SQL、JSON查詢(xún),功能健全、可靠性高,MySQL、PostgreSQL等常用數(shù)據(jù)庫(kù)國(guó)內(nèi)外服務(wù)商都是提供的,用戶(hù)可以專(zhuān)注開(kāi)發(fā)自己的項(xiàng)目,完全不用管數(shù)據(jù)庫(kù)關(guān)系操作。以上就是聚名企服的回答,希望對(duì)你有所幫助~
轉(zhuǎn)載請(qǐng)帶上網(wǎng)址:http://m.fzog.com.cn/posjitwo/92537.html