1. postgresql流復制 怎麼驗證備份
PostgreSQL自帶一個客戶端pgAdmin,裡面有個備份,恢復選項,也能對資料庫進行備份 恢復(還原),談跡但最近發現資料庫慢慢龐大的時候,經常出錯,備份的文件過程中出錯的幾率那是相當大,手動調節灰常有限。所以一直尋找完美的備份恢復方案。
夢里尋他千網路,伊人卻在燈火闌珊處...其實PostgreSQL內置含困並不少的工具,尋找的備份恢復方案就在其中:pg_mp,psql。這兩個指令 在資料庫的安裝目錄下,比如我自己本地安裝的,路徑形如:C:\Program Files\PostgreSQL\9.5\;然後進入到bin文件夾,會看到不少的exe文件,這就是PostgreSQL內置的工具了。裡面會找到 pg_mp.exe,psql.exe兩個文件。我們怎麼用他們?
用法:
備份資料庫,指令如下:
pg_mp -h 164.82.233.54 -U postgres databasename > C:\databasename.bak
開始-運行-cmd 彈出dos控制台;然後 在控制台里,進入PostgreSQL安裝目錄bin下:
cd C:\Program Files\PostgreSQL\9.0\bin
最後執行備份指令:
pg_mp -h 164.82.233.54 -U postgres databasename > C:\databasename.bak
指令解釋:如上命令,pg_mp 是備份資料庫指令,164.82.233.54是資料庫的ip地址(必須保證資料庫允許外部訪問的許可權哦~),當然本地的資料庫ip寫 localhost;postgres 是資料庫的用戶名;databasename 是資料庫名。> 意思是導出到C:\databasename.bak文件里,如果沒尺羨有寫路徑,單單寫databasename.bak文件名,那麼備份文件會保存在C: \Program Files\PostgreSQL\9.0\bin 文件夾里。
恢復資料庫,指令如下:
psql -h localhost -U postgres -d databasename < C:\databasename.bak(測試沒有成功)
pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "symbolmcnew" --no-password --verbose "databasename.backup"(測試成功)
指令解釋:如上命令,psql是恢復資料庫命令,localhost是要恢復到哪個資料庫的地址,當然你可以寫上ip地址,也就是說能遠程恢復(必須保證 資料庫允許外部訪問的許可權哦~);postgres 就是要恢復到哪個資料庫的用戶;databasename 是要恢復到哪個資料庫。< 的意思是把C:\databasename.bak文件導入到指定的資料庫里。
以上所有的是針對windows而言的,如果在linux下,會不會有效?
在linux里依然有效。有一個值得注意的是:如果直接進入PostgreSQL的安裝目錄bin下,執行命令,可能會出現 找不到pg_mp,psql的現象,我們在可以這樣:
備份:
/opt/PostgreSQL/9.5/bin/pg_mp -h 164.82.233.54 -U postgres databasename > databasename.bak
恢復:
/opt/PostgreSQL/9.5/bin/psql -h localhost -U postgres -d databasename < databasename.bak
2. pgsql的主鍵存儲方式
PostgreSQL的穩定性極強,Innodb等索引在崩潰,斷電之類的災難場景下 抗擊打能力有了長足進步,然而很多 MqSQL用戶 都遇到過 Server級的資料庫丟失的場景 -- MySQL系統庫是 MyISAM,相比之下,PG資料庫這方面要更好一些。
任何系統都有它的性能極限,在高並發讀寫,負載逼近極限下,PG的性能指標仍可以位置雙曲線甚至對數曲線,到 頂峰之後不在下降,而MySQL明顯出現一個波峰後下滑(5.5版本 之後,在企業級版本中有個插件可以改善很多,不過需要付費)。
PG多年來在 GIS(地理信息)領域處於優勢地位,因為它有豐富的幾何類型,PG有大量字典,數組,bitmap等數據類型,相比之下 MySQL就差很多, Instagram就是因為 PG的空間資料庫 擴展 POSTGIS遠遠強於 MySQL的 my spatial 而採用 PgSQL的。
PG的「無鎖定」特性非常突出,甚至包括 vacuum這樣的整理數據空間的操作,這個和PGSQL的MVCC實現有關系。
PG可以使用函數 和 條件索引,這使得 PG資料庫的調優非常靈活, MySQL就沒有這個功能,條件索引在 web應用中 很重要。
PG有極其強悍的 SQL編程能力(9.x 圖靈完備,支持遞歸!),有非常豐富的統計函數和統計語法支持,比如分析函數(Oracle的叫法,PG里叫Window函數),還可以用多種語言來寫存儲過程,對於 R的支持也很好。這一點MySQL就差很多,很多分析功能都不支持,騰訊內部的存儲主要是 MySQL,但是數據分析主要是 Hadoop+ PgSQL。
PG的有多種集群架構可以選擇,plproxy可以之hi語句級的鏡像或分片,slony可以進行欄位級的同步配置,standby 可以構建 WAL文件級或流式的讀寫分離集群,同步頻率和集群策略調整方便。
一般關系型資料庫字元串有長度限制 8k 左右,無限長 TEXT類型的功能受限,只能作為外部大數據訪問。而 PG 的 TEXT 類型 可以直接訪問且無長度限制, SQL語法內置 正則表達式,可以索引,還可以全文檢索,或使用 xml xpath。用 PG的話,文檔資料庫都可以省了。
PgSQL對於 numa 架構的支持比 MySQL強一些,比 MySQL對於讀的性能更好一些, PgSQL提交可以完全非同步提交,而 MySQL的內存表不夠實用(因為表鎖的原因)。
pgsql除了存儲正常的數據類型外,還支持存儲
array,不管是一維數組還是多維數組均支持。
json和jsonb,相比使用 text存儲要高效很多。
json和 jsonb在更高的層面上看起來幾乎是一樣的,但是存儲實現上是不同的。
json存儲完的文本,json列會每次都解析存儲的值,它不支持索引,但 可以為創建表達式索引。
jsonb存儲的二進制格式,避免了重新解析數據結構。它支持索引,這意味著 可以不使用指定索引就能查詢任何路徑。
當我們比較寫入數據速度時,由於數據存儲 的方式的原因,jsonb會比 json 稍微的慢一點。json列會每次都 解析存儲的值,這意味著鍵的順序要和輸入的 時候一樣。但是 jsonb不同,以二進制格式存儲且不保證鍵的順序。因此如果有軟體需要依賴鍵的順序,jsonb可能不是最佳選擇。使用 jsonb的優勢還在於可以輕易的整合關系型數據和非關系型 數據 ,PostgreSQL對於 mongodb這類資料庫是一個不小的威脅,畢竟如果一個表中只有一列數據的類型是半結構化的,沒有必要為了遷就它而整個表的設計都採用 schemaless的結構。
1. CPU限制
PGSQL
沒有CPU核心數限制,有多少CPU核就用多少
MySQL
能用128核CPU,超過128核用不上
2. 配置文件參數
PGSQL
一共有255個參數,用到的大概是80個,參數比較穩定,用上個大版本配置文件也可以啟動當前大版本資料庫
MySQL
一共有707個參數,用到的大概是180個,參數不斷增加,就算小版本也會增加參數,大版本之間會有部分參數不兼容情況
3. 第三方工具依賴情況
PGSQL
只有高可用集群需要依靠第三方中間件,例如:patroni+etcd、repmgr
MySQL
大部分操作都要依靠percona公司的第三方工具(percona-toolkit,XtraBackup),工具命令太多,學習成本高,高可用集群也需要第三方中間件,官方MGR集群還沒成熟
4. 高可用主從復制底層原理
PGSQL
物理流復制,屬於物理復制,跟SQL Server鏡像/AlwaysOn一樣,嚴格一致,沒有任何可能導致不一致,性能和可靠性上,物理復制完勝邏輯復制,維護簡單
MySQL
主從復制,屬於邏輯復制,(sql_log_bin、binlog_format等參數設置不正確都會導致主從不一致)
大事務並行復制效率低,對於重要業務,需要依賴 percona-toolkit的pt-table-checksum和pt-table-sync工具定期比較和修復主從一致
主從復制出錯嚴重時候需要重搭主從
MySQL的邏輯復制並不阻止兩個不一致的資料庫建立復制關系
5. 從庫只讀狀態
PGSQL
系統自動設置從庫默認只讀,不需要人工介入,維護簡單
MySQL
從庫需要手動設置參數super_read_only=on,讓從庫設置為只讀,super_read_only參數有bug,鏈接:https://jiahao..com/s?id=1636644783594388753&wfr=spider&for=pc
6. 版本分支
PGSQL
只有社區版,沒有其他任何分支版本,PGSQL官方統一開發,統一維護,社區版有所有功能,不像SQL Server和MySQL有標准版、企業版、經典版、社區版、開發版、web版之分
國內外還有一些基於PGSQL做二次開發的資料庫廠商,例如:Enterprise DB、瀚高資料庫等等,當然這些只是二次開發並不算獨立分支
MySQL
由於歷史原因,分裂為三個分支版本,MariaDB分支、Percona分支 、Oracle官方分支,發展到目前為止各個分支基本互相不兼容
Oracle官方分支還有版本之分,分為標准版、企業版、經典版、社區版
7. SQL特性支持
PGSQL
SQL特性支持情況支持94種,SQL語法支持最完善,例如:支持公用表表達式(WITH查詢)
MySQL
SQL特性支持情況支持36種,SQL語法支持比較弱,例如:不支持公用表表達式(WITH查詢)
關於SQL特性支持情況的對比,可以參考:http://www.sql-workbench.net/dbms_comparison.html
8. 主從復制安全性
PGSQL
同步流復制、強同步(remote apply)、高安全,不會丟數據
PGSQL同步流復制:所有從庫宕機,主庫會罷工,主庫無法自動切換為非同步流復制(非同步模式),需要通過增加從庫數量來解決,一般生產環境至少有兩個從庫
手動解決:在PG主庫修改參數synchronous_standby_names ='',並執行命令: pgctl reload ,把主庫切換為非同步模式
主從數據完全一致是高可用切換的第一前提,所以PGSQL選擇主庫罷工也是可以理解
MySQL
增強半同步復制 ,mysql5.7版本增強半同步才能保證主從復制時候不丟數據
mysql5.7半同步復制相關參數:
參數rpl_semi_sync_master_wait_for_slave_count 等待至少多少個從庫接收到binlog,主庫才提交事務,一般設置為1,性能最高
參數rpl_semi_sync_master_timeout 等待多少毫秒,從庫無回應自動切換為非同步模式,一般設置為無限大,不讓主庫自動切換為非同步模式
所有從庫宕機,主庫會罷工,因為無法收到任何從庫的應答包
手動解決:在MySQL主庫修改參數rpl_semi_sync_master_wait_for_slave_count=0
9. 多欄位統計信息
PGSQL
支持多欄位統計信息
MySQL
不支持多欄位統計信息
10. 索引類型
PGSQL
多種索引類型(btree , hash , gin , gist , sp-gist , brin , bloom , rum , zombodb , bitmap,部分索引,表達式索引)
MySQL
btree 索引,全文索引(低效),表達式索引(需要建虛擬列),hash 索引只在內存表
11. 物理表連接演算法
PGSQL
支持 nested-loop join 、hash join 、merge join
MySQL
只支持 nested-loop join
12. 子查詢和視圖性能
PGSQL
子查詢,視圖優化,性能比較高
MySQL
視圖謂詞條件下推限制多,子查詢上拉限制多
13. 執行計劃即時編譯
PGSQL
支持 JIT 執行計劃即時編譯,使用LLVM編譯器
MySQL
不支持執行計劃即時編譯
14. 並行查詢
PGSQL
並行查詢(多種並行查詢優化方法),並行查詢一般多見於商業資料庫,是重量級功能
MySQL
有限,只支持主鍵並行查詢
15. 物化視圖
PGSQL
支持物化視圖
MySQL
不支持物化視圖
16. 插件功能
PGSQL
支持插件功能,可以豐富PGSQL的功能,GIS地理插件,時序資料庫插件, 向量化執行插件等等
MySQL
不支持插件功能
17. check約束
PGSQL
支持check約束
MySQL
不支持check約束,可以寫check約束,但存儲引擎會忽略它的作用,因此check約束並不起作用(mariadb 支持)
18. gpu 加速SQL
PGSQL
可以使用gpu 加速SQL的執行速度
MySQL
不支持gpu 加速SQL 的執行速度
19. 數據類型
PGSQL
數據類型豐富,如 ltree,hstore,數組類型,ip類型,text類型,有了text類型不再需要varchar,text類型欄位最大存儲1GB
MySQL
數據類型不夠豐富
20. 跨庫查詢
PGSQL
不支持跨庫查詢,這個跟Oracle 12C以前一樣
MySQL
可以跨庫查詢
21. 備份還原
PGSQL
備份還原非常簡單,時點還原操作比SQL Server還要簡單,完整備份+wal歸檔備份(增量)
假如有一個三節點的PGSQL主從集群,可以隨便在其中一個節點做完整備份和wal歸檔備份
MySQL
備份還原相對不太簡單,完整備份+binlog備份(增量)
完整備份需要percona的XtraBackup工具做物理備份,MySQL本身不支持物理備份
時點還原操作步驟繁瑣復雜
22. 性能視圖
PGSQL
需要安裝pg_stat_statements插件,pg_stat_statements插件提供了豐富的性能視圖:如:等待事件,系統統計信息等
不好的地方是,安裝插件需要重啟資料庫,並且需要收集性能信息的資料庫需要執行一個命令:create extension pg_stat_statements命令
否則不會收集任何性能信息,比較麻煩
MySQL
自帶PS庫,默認很多功能沒有打開,而且打開PS庫的性能視圖功能對性能有影響(如:內存佔用導致OOM bug)
23. 安裝方式
PGSQL
有各個平台的包rpm包,deb包等等,相比MySQL缺少了二進制包,一般用源碼編譯安裝,安裝時間會長一些,執行命令多一些
MySQL
有各個平台的包rpm包,deb包等等,源碼編譯安裝、二進制包安裝,一般用二進制包安裝,方便快捷
24. DDL操作
PGSQL
加欄位、可變長欄位類型長度改大不會鎖表,所有的DDL操作都不需要藉助第三方工具,並且跟商業資料庫一樣,DDL操作可以回滾,保證事務一致性
MySQL
由於大部分DDL操作都會鎖表,例如加欄位、可變長欄位類型長度改大,所以需要藉助percona-toolkit裡面的pt-online-schema-change工具去完成操作
將影響減少到最低,特別是對大表進行DDL操作
DDL操作不能回滾
25. 大版本發布速度
PGSQL
PGSQL每年一個大版本發布,大版本發布的第二年就可以上生產環境,版本迭代速度很快
PGSQL 9.6正式版推出時間:2016年
PGSQL 10 正式版推出時間:2017年
PGSQL 11 正式版推出時間:2018年
PGSQL 12 正式版推出時間:2019年
MySQL
MySQL的大版本發布一般是2年~3年,一般大版本發布後的第二年才可以上生產環境,避免有坑,版本發布速度比較慢
MySQL5.5正式版推出時間:2010年
MySQL5.6正式版推出時間:2013年
MySQL5.7正式版推出時間:2015年
MySQL8.0正式版推出時間:2018年
26. returning語法
PGSQL
支持returning語法,returning clause 支持 DML 返回 Resultset,減少一次 Client <-> DB Server 交互
MySQL
不支持returning語法
27. 內部架構
PGSQL
多進程架構,並發連接數不能太多,跟Oracle一樣,既然跟Oracle一樣,那麼很多優化方法也是相通的,例如:開啟大頁內存
MySQL
多線程架構,雖然多線程架構,但是官方有限制連接數,原因是系統的並發度是有限的,線程數太多,反而系統的處理能力下降,隨著連接數上升,反而性能下降
一般同時只能處理200 ~300個資料庫連接
28. 聚集索引
PGSQL
不支持聚集索引,PGSQL本身的MVCC的實現機制所導致
MySQL
支持聚集索引
29. 空閑事務終結功能
PGSQL
通過設置 idle_in_transaction_session_timeout 參數來終止空閑事務,比如:應用代碼中忘記關閉已開啟的事務,PGSQL會自動查殺這種類型的會話事務
MySQL
不支持終止空閑事務功能
30. 應付超大數據量
PGSQL
不能應付超大數據量,由於PGSQL本身的MVCC設計問題,需要垃圾回收,只能期待後面的大版本做優化
MySQL
不能應付超大數據量,MySQL自身架構的問題
31. 分布式演進
PGSQL
HTAP資料庫:cockroachDB、騰訊Tbase
分片集群: Postgres-XC、Postgres-XL
MySQL
HTAP資料庫:TiDB
分片集群: 各種各樣的中間件,不一一列舉
32. 資料庫的文件名和命名規律
PGSQL
PGSQL在這方面做的比較不好,DBA不能在操作系統層面(停庫狀態下)看清楚資料庫的文件名和命名規律,文件的數量,文件的大小
一旦操作系統發生文件丟失或硬碟損壞,非常不利於恢復,因為連名字都不知道
PGSQL表數據物理文件的命名/存放規律是: 在一個表空間下面,如果沒有建表空間默認在默認表空間也就是base文件夾下,例如:/data/base/16454/3599
base:默認表空間pg_default所在的物理文件夾
16454:表所在資料庫的oid
3599:就是表對象的oid,當然,一個表的大小超出1GB之後會再生成多個物理文件,還有表的fsm文件和vm文件,所以一個大表實際會有多個物理文件
由於PGSQL的數據文件布局內容太多,大家可以查閱相關資料
當然這也不能全怪PGSQL,作為一個DBA,時刻做好資料庫備份和容災才是正道,做介質恢復一般是萬不得已的情況下才會做
MySQL
資料庫名就是文件夾名,資料庫文件夾下就是表數據文件,但是要注意表名和資料庫名不能有特殊字元或使用中文名,每個表都有對應的frm文件和ibd文件,存儲元數據和表/索引數據,清晰明了,做介質恢復或者表空間傳輸都很方便
33. 許可權設計
PGSQL
PGSQL在許可權設計這塊是比較坑爹,拋開實例許可權和表空間許可權,PGSQL的許可權層次有點像SQL Server,db=》schema=》object
要說許可權,這里要說一下Oracle,用Oracle來類比
在ORACLE 12C之前,實例與資料庫是一對一,也就是說一個實例只能有一個資料庫,不像MySQL和SQL Server一個實例可以有多個資料庫,並且可以隨意跨庫查詢
而PGSQL不能跨庫查詢的原因也是這樣,PGSQL允許建多個資料庫,跟ORACLE類比就是有多個實例(之前說的實例與資料庫是一對一)
一個資料庫相當於一個實例,因為PGSQL允許有多個實例,所以PGSQL單實例不叫一個實例,叫集簇(cluster),集簇這個概念可以查閱PGSQL的相關資料
PGSQL裡面一個實例/資料庫下面的schema相當於資料庫,所以這個schema的概念對應MySQL的database
注意點:正因為是一個資料庫相當於一個實例,PGSQL允許有多個實例/資料庫,所以資料庫之間是互相邏輯隔離的,導致的問題是,不能一次對一個PGSQL集簇下面的所有資料庫做操作
必須要逐個逐個資料庫去操作,例如上面說到的安裝pg_stat_statements插件,如果您需要在PGSQL集簇下面的所有資料庫都做性能收集的話,需要逐個資料庫去執行載入命令
又例如跨庫查詢需要dblink插件或fdw插件,兩個資料庫之間做查詢相當於兩個實例之間做查詢,已經跨越了實例了,所以需要dblink插件或fdw插件,所以道理非常簡單
許可權操作也是一樣逐個資料庫去操作,還有一個就是PGSQL雖然像SQL Server的許可權層次結構db=》schema=》object,但是實際會比SQL Server要復雜一些,還有就是新建的表還要另外授權
在PGSQL裡面,角色和用戶是一樣的,對新手用戶來說有時候會傻傻分不清,也不知道怎麼去用角色,所以PGSQL在許可權設計這一塊確實比較坑爹
MySQL
使用mysql庫下面的5個許可權表去做許可權映射,簡單清晰,唯一問題是缺少許可權角色
user表
db表
host表
tables_priv表
columns_priv表
1. 架構對比
Mysql:多線程
PostgreSql:多進程
多線程架構和多進程架構之間沒有絕對的好壞,例如oracle在unix上是多進程架構,在windows上是多線程架構。
2. 對存儲過程及事務的支持能力
MySql對於無事務的MyISAM表,採用表鎖定,一個長時間運行的查詢很可能會長時間的阻礙,而PostgreSQL不會尊在這種問題。
PostgreSQL支持存儲過程,要比MySql好,具備本地緩存執行計劃的能力。
3. 穩定性及性能
高並發讀寫,負載逼近極限下,PG的性能指標仍可以維持雙曲線甚至對數曲線,到頂峰之後不再下降,而 MySql 明顯出現一個波峰後下滑(5.5版本後Mysql企業版有優化,需要付費)
MySql的InnoDB引擎,可以充分優化利用系統的所有內存,超大內存下PG對內存使用的不那麼充分(需要根據內存情況合理分配)。
4. 高可用
InnoDB的基於回滾實現的 MVCC 機制,對於 PG 新老數據一起放的基於 XID 的 MVCC機制,是占優的。新老數據一起存放,需要定時觸發 VACUUM,會帶來多餘的 IO 和資料庫對象加鎖開銷,引起資料庫整理的並發能力下降。而且 VACUUM 清理不及時,還可能會引發數據膨脹
5. 數據同步方式:
Mysql到現在也是非同步復制,pgsql可以做到同步、非同步、半同步復制。
Mysql同步是基於binlog復制,屬於邏輯復制,類似於oracle golden gate,是基於stream的復制,做到同步很困難,這種方式更加適合非同步復制;
Pgsql的同是基於wal,屬於物理復制,可以做到同步復制。同時,pgsql還提供stream復制。
Mysql的復制可以用多級從庫,但是在9.2之前,PgSql不能用從庫帶從庫。
Pgsql的主從復制屬於物理復制,相對於Mysql基於binlog的邏輯復制,數據的一致性更加可靠,復制性能更高,對主機性能的影響也更小。
6. 許可權控制對比
MySql允許自定義一套不同的數據級、表級和列的許可權,運行指定基於主機的許可權
Mysql的merge表提供了 一個獨特管理多個表的方法。myisampack可以對只讀表進行壓縮,以後仍然可以直接訪問該表中的行。
7. SQL語句支持能力
PG有極其強悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有非常豐富的統計函數和統計語法支持,例如分析函數(Oracle的叫法,PG里叫window函數)
支持用多種語言來寫存儲過程,對於R的支持也很好。這一點上Mysql就差的很遠,很多分析功能都不支持。
PgSql對表名大小寫的處理,只有在Sql語句中,表明加雙引號,才區分大小寫。
在Sql的標准實現上要比Mysql完善,而且功能實現比較嚴謹。
對表連接支持比較完整,優化器的功能比較完整,支持的索引類型很多,復雜查詢能力較強。
Mysql採用索引組織表,這種存儲方式非常適合基於主鍵匹配的查詢、刪改操作,但是對表結果設計存在約束;
Mysql的Join操作的性能非常的差,只支持Nest Join,所以一旦數據量大,性能就非常的差。PostgresSQL除了支持 Nest Join 和 Sort Merge Join,PostgreSQL還支持正則表達式查詢,MySql不支持。
8. 數據類型支持能力
PostgreSQL可以更方便的使用UDF(用戶定義函數)進行擴展。
有豐富的幾何類型,實際上不止集合類型,PG有大量的字典、數組、bitmap等數據類型,因此PG多年來在 GIS 領域處於優勢地位。相比之下Mysql就差很多,instagram就是因為PG的空間數據擴展 PostGIS遠遠強於 MySql的 my spatial 而採用 PgSql的。Mysql中的空間數據類型有4種,分別是 CEOMETRY、POINT、LINESTRING、POLYGON,其空間索引只能在存儲引擎為 MyiSam的表中創建,用SPATIAL關鍵字進行擴展,使得能夠用於創建正規索引類型的語法創建空間索引。創建空間索引的列,必須將其聲明為NOT NULL。不同的存儲親情有差別。MyISAM和InnoDB 都支持 spatial extensions,但差別在於:如果使用MyISAM,可以建立 spatial index,而 InnoDB是不支持的。
pgsql對json支持比較好,還有很逆天的fdw功能,就是把別的資料庫中的表當自己的用。
pgsql的欄位類型支持的多,有很多mysql沒有的類型,但是實際中有時候用到。
一半關系型資料庫的字元串長度8k左右,無限長的 TEXT 類型的功能受限,只能作為外部帶數據訪問。而 PG 的 TEXT 類型可以直接訪問,SQL 語法內置正則表達式,可以索引,還可以全文檢索,或使用 xml xpath。用 PG 的話,文檔資料庫都可以省了。
postgresql 有函數,用於報表、統計很方便
PG支持 R-Trees這樣可擴展的索引類型,可以方便的處理一些特殊數據。
PG可以使用函數和條件所以,使得資料庫的調優非常靈活,mysql就沒有這個功能,條件索引在web應用中很重要。
9. 如可過程容錯能力
大批量數據入庫,PostgreSql要求所有的數據必須完全滿足要求,有一條錯誤,整個數據入庫過程失敗。MySql無此問題。
10. 表組織方式
pgsql用繼承的方式實現分區表,讓分區表的使用不方便且性能差,這點比不上mysql。
pg主表採用堆表存放,MySQL採用索引組織表,能夠支持比MySql更大的數據量。
MySql分區表的實現要優於PG的基於繼承表的分區實現,主要體現在分區個數達到成千上萬後的處理性能差異很大。
11. 開發結構
對於web應用來所,mysql 5.6 的內置 MC API 功能很好用,PgSQL差一些。
PG的「無鎖定」特性非常突出,甚至包括 vacuum 這樣的整理數據空間的操作,這個和 PGSQL的 MVCC 實現有關系。
好文要頂 關注我 收藏該文
茄子777
粉絲 - 0 關注 - 0
+加關注
00
« 上一篇: 多線程中的wait與join
» 下一篇: 負載均衡相關
posted @ 2022-11-02 16:20 茄子777 閱讀(55) 評論(0) 編輯 收藏 舉報
刷新評論刷新頁面返回頂部
登錄後才能查看或發表評論,立即 登錄 或者 逛逛 博客園首頁
【推薦】阿里雲新人特惠,爆款雲伺服器2核4G低至0.46元/天
【推薦】雙十一同價!騰訊雲雲伺服器搶先購,低至4.2元/月
編輯推薦:
· 一個有趣的 nginx HTTP 400 響應問題分析
· 誰說.NET沒有GC調優?只改一行代碼就讓程序不再佔用內存
· 為什麼標准庫的模板變數都是 inline 的
· .net 如何優雅的使用 EFCore
· 在 C# 中使用 Halcon 開發視覺檢測程序
閱讀排行:
· Entity Framework Core 7中高效地進行批量數據插入
· 除了 filter 還有什麼置灰網站的方式?
· 快速繪制流程圖「GitHub 熱點速覽 v.22.47」
· 使用.NET7和C#11打造最快的序列化程序-以MemoryPack為例
· 私藏!資深數據專家SQL效率優化技巧 ⛵
3. pg資料庫能否實現雙主高可用
資料庫層可能已經成為了整個系統的關鍵點和性能瓶頸了,因此實現數據層絕念的高可用就...MySQL雙主手碼(主主)架構方案 閱讀數 72 在企業中,資料庫高可用並薯困一直是
4. 如何將在外面建好的資料庫表送到安卓程序中然後使用這個資料庫表
1.如果是辦公軟體就需要將表下載到手機,然後襲枯用手機的辦公軟體(需下載)打開
2.如果是關於手機內穗譽部數據的就猜禪段幫不到你了
5. arterybase資料庫是什麼
ArteryBase是華宇完全自主研發的資料庫產品。ArteryBase資料庫管理系統支持標准SQL語句;主要以OLTP類型業務系統應用,提供事務、子查詢、多版本並行控制系統(MVCC)、數據完殲猛清整性檢查,全面完整的數據一致性和可靠性特性;資料庫伺服器提供了統一的客戶端C 介面,提供了ODBC、JDBC國際化標准介面,也提供Python、perl等語言的編程介面,通過編程介面可以擴展資料庫功能滿足業務發展需要; ArteryBase提供資料庫的數據建模、資料庫開發、資料庫運維管理、資料庫監控調優、資料庫配置管理知桐、資料庫審計等數據應用全過程的工具,可靠的支撐了應用業務系統平台的建立,可以讓業務系統整合、數據遷移、數據安全保障等工程工作更有效率。ArteryBase包括客戶端、伺服器端、管理監控等模塊,支持多種操作系統,支持表分區氏前、邏輯備份、基於時間點還原、網路計算、流復制、雲部署等功能。
6. Oracle高級復制和流哪個效率更好
Oracle備份功能包括:
高級復制(Advanced Replication)
流復制(Streams Replication)
備庫(Dataguard)
一 dataguard:
dataguard在高可用及容災方面一般是dba的首選,畢竟dataguard在這方面 存在壓倒性的優勢,不管是物理備用庫(physical standby database)還是邏輯備用庫(logical standby database),它們都具有一些共同的待征。
配置和管理方面的成本:dataguard比stream replication簡單方便;安全與穩定方面的成本:dataguard比stream replication穩定可靠。
對對於一個24x7的系統來說,這些是非常重要的,系統宕機時間的增加不僅影響著公司的形象,還會影響公司的效益;採用dataguard,數據的安啟凳早全性相當有保障,物理備用庫可以在最短的時間完成故障切換,邏輯備用庫在保障數據安全的同時, 也可以承擔大量的報表等業務;由於dataguard的配置與管理比較簡單,同理也降低了dba的工作強度;
二 流復制:
適用於如下情況:
1、局部復制 stream可以只復制某些表或某些模式
2、異構環境 充分利用現有的設備與技術
3、遠程容災 stream對網路的要求較dataguard低
stream replication有靈活的復制策略,不僅可以配置只復制某些表,還可以配置僅復制某些表上的ddl或dml,相比dataguard必須整個資料庫復制而言,可以節省相當的存儲投資,畢竟對於某些海量數據而言,有許多是不必要復制的。
如果在異構環境,即不同的操作系統,那dataguard將會束手無策,非stream replication莫屬,這樣可以充分利用現有的環境,配置高用可方案,在異構環境,stream replication將會是advanced replication的強勁對手。
stream replication傳播的是經過logmnr挖掘並包裝的邏輯改變記錄(LCRs),相比dataguard傳送archived redo log、advanced replication的mview log與mview刷新的方式,stream replication對網路的需求降低了很多,在遠程異地容災的過程中,租用網路帶寬是一筆較高的費用,stream replication可以適當地降低這筆費用。
三 高級復制:
advanced replication相對於dataguard,缺點是:配置與管理較復雜、安全與穩定性不夠;優點:局部復制、異構環境等。advanced replication是一種相當成熟的技術,在許多關鍵系統中得到成功的運用,相對於9iR2推出的stream replication而言,雙方適用的粗禪環境雖然相當,比如都可以進行局部復制、異構復制、遠程容災等,advanced replication目前在穩定性與安全性方面更經得起考驗。
對比stream replication與advanced replication底層的實現技術,stream replication在實時性、穩定性、高效率、低消耗(較少的cpu/network資源)等方面更有優勢,但凡一些新推出的功能,都或多或少存在一些不確定的因素。
在10gR1中,oracle針對目前stream replication存在的弱點進行了增強,不僅提供了從advanced replication遷移到stream replication的腳本,還提供了stream replication的配置與監控工具,stream replication在配置與管理方面必將智能化、簡單化,擔負起與shareplex爭奪企業數據復制市場的重任。
四 高級復制與流復制區別
高級復制與Streams Replication的原理是完全不同的,Streams Replication可以到表,用戶,資料庫級別,但高級復制似乎只能到表一級。
Streams Replication不是高級復制的升級版。
異構環境下,oracle的高可用和容災有高級復制和stream 復制兩種,兩種的異同點如下:
1.高級復制是基於觸發器(trigger)原理悄雀,而stream是基於日誌挖掘原理,因此stream復制對源資料庫的性能影響更小,但實時性不如高級復制。
2.高級復制復制的對象是基於資料庫目標(object)的,如表、索引和存儲過程,而stream復制可以針對表、方案(schema)和整個資料庫,因此如果出於容災整個資料庫的考慮,stream復制的配置相對簡單。
3.高級復制是一種相當成熟的技術,在許多關鍵系統中得到成功的運用,相對於9iR2推出的stream復制,高級復制目前在穩定性與安全性方面更經得起考驗。
4.從發展的角度看,流的應用會越來越多,從oracle10g,oracle公司提供了從高級復制向流復制移植的工具,可以看出,oracle公司會更偏重於基於流的新技術。
5.由於高級復制是基於觸發器的,因此所有的復制對象結構(ddl)的改變,都必須通過oracle提供的復制包來實施,和應用結合的比較緊,更適合於開發者使用,而流復制則更適合dba來實施。
6. 流復制支持雙向數據復制,而高級復制會有沖突;
7. 流復制支持異構資料庫復制,而沒有資料說明高級復制也有相同功能;
兩種實際使用來看,streams復制需要更少的帶寬,2m帶寬,如果 streams復制不行,高級復制大概更沒戲,但是用streams最好別網路斷線時間過長,不知道是bug還是oracle沒考慮這種情況,如果復制停 頓一段時間,再恢復正常,大概是隊列表中消息太多了,入隊出隊都很慢,非線性增長啊,這樣就需要不短的一段時間來同步數據,高級復制就沒這種狀況。
bug,反正10,2,0,1有一些,看你碰的到碰不到了,嚴重的能讓你刪掉隊列表重建才行,意味著基本是重建整個復制了,不過想重復一下又不出現了;還有使用negative rule如果站點多了遇到大的更新事務速度就變得極慢,站點多了要先設計好結構;會不停在有apply進程的站點ump目錄下生成trc文件,雖然還算不上很成熟,不過streams復制真是好東西,以後必定會取代高級復制,建議打10.2.0.3補丁,據說修正了不少bug.
stream對系統的設計與維護方要有相當的對stream技術的把控能力,而大多數系分與 DBA對這個東西都沒有經驗,所以難以推廣;dataguard勝在維護簡單可靠,一般dba都可以維護。stream以後會的前景會非常廣闊! 尤其是雙向復制,解決了很多實際問題。
7. 資料庫鏡像的作用一般有哪些
資料庫鏡像是DBMS根據DBA的要求,自動把其中的關鍵數據復制到另一個磁碟上,以下是由我整理的資料庫鏡像的內容,希望大家喜歡!
資料庫鏡像的作用
當出現介質故障時,可由鏡像磁碟繼續提供資料庫的可用性,同時DBMS自動利用鏡像磁碟進行資料庫的修復,不需要關閉系統和重裝資料庫副本。
沒有出現故障時,資料庫鏡像還可以用於並發操作。即當一個用戶對資料庫加排他鎖修改數據時,其他用戶可以讀鏡像資料庫,而不必等待該用戶釋放鎖。
資料庫鏡像的簡介
為了避免介質故障影響資料庫的可用性,許多DBMS還可以提供了資料庫鏡像(mirror)和復制功能,它不同於數據轉儲,一般由DBMS按DBA的要求自動完成。
資料庫鏡像的注意事項
資料庫鏡像是通過復制數據實現的,頻繁地復制自然會降低系統運行效率,因此在實際應用中用戶往往只選擇對關鍵數據鏡像,如對日誌文件鏡像,而不是對整個資料庫進行鏡像。
鏡像技術的基本內容
在網路中鏡像就是將指定埠的報文或者符合指定規則的報文復制到目的埠,用戶可以利用鏡像技術,進行網路監管和故障排除。鏡像技術包括三種方式:本地埠鏡像;遠程埠鏡像;流鏡像。
本地埠鏡像:是指將設備的一個或多個埠(源埠)的報文復制到本設備的一個監視埠(目的埠),用於報文的監視和分析。其中源埠和目的埠必須在同一台設備上。遠程埠鏡像:是指將設備的一個或多個埠的報文復制並通過中間網路設備轉發到指定目的交換機上的目的埠。他突破了源埠和目的埠必須在同一台設備上的限制,是源埠和目的埠見可以跨越多個網路設備。
流鏡像:是指通過ACL等規則將具有某特徵的數據流復制到目的埠。為了更好地理解後面的內容,首先介紹一下埠鏡像中涉及的基本概念。
埠鏡像的概念
1、源埠
源埠是被監控的埠,用戶可以對通過該埠的報文進行監控和分析。
2、源VLAN
源VLAN是被監控的VLAN,用戶可以對通過該VLAN所有埠的報文進行監控和分析。
3、源CPU
源CPU是被監控單板上的CPU,用戶可以對通過該CPU的報文進行監控和分析。
4、目的埠
目的埠也可稱為監控埠,該埠將接收到的報文轉發到數據監測設備,以便對報文進行監控和分析。
8. postgresql流復制能到不同的操作系統上嗎
一般來說資料庫的通訊是與操作系統無關的,但是主從復制一般是要求雙方的環境飢仿及版本一致,否則會出一些奇爛返纖怪的問題,建議你可以自己測試一下(如世運果沒有真機也可以用虛擬機來測試)
9. 很多伺服器,怎麼保持數據的實時同步呢
很好的問題,我說下我的想法,
騰訊有很多伺服器,北京上海應該不是登錄同一個伺服器,但是資料庫應該是同一個,用戶資料這種數據應該也是採取分布式存儲的(不一定是放在關系型資料庫裡面,騰訊這種公司現在在很好的使用雲技術),有一個核心主庫,各分布式伺服器上的數據作為主庫的實例緩存在分布式環境中,而修改在線簽名這種操作,技術上認為是需要及時同步到主庫的,那麼上海伺服器需要什麼資料時,肯定需要從主庫拿一次的,這時候拿到的肯定是最新的,同時主庫發生了什麼變更的時候可以主動發起一個PUSH操作,同步各分布式實例。總之,分布式環境下,我們可以定義同步操作的重要級別,級別高的需要迅速完成同步的,並不一定很多,所以效率上面沒有問題就可以了。