04 正版instagram官方版2022(pgsql的主鍵存儲方式)

时间:2024-05-21 07:49:18 编辑: 来源:

能,圖片也能“搜一搜”了

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

大部分操作都要依靠per買粉絲na公司的第三方工具(per買粉絲na-toolkit,XtraBackup),工具命令太多,學習成本高,高可用集群也需要第三方中間件,官方MGR集群還沒成熟

4. 高可用主從復制底層原理

PGSQL

物理流復制,屬于物理復制,跟SQL Server鏡像/AlwaysOn一樣,嚴格一致,沒有任何可能導致不一致,性能和可靠性上,物理復制完勝邏輯復制,維護簡單

MySQL

主從復制,屬于邏輯復制,(sql_log_bin、binlog_format等參數設置不正確都會導致主從不一致)

大事務并行復制效率低,對于重要業務,需要依賴 per買粉絲na-toolkit的pt-table-checksum和pt-table-sync工具定期比較和修復主從一致

主從復制出錯嚴重時候需要重搭主從

MySQL的邏輯復制并不阻止兩個不一致的數據庫建立復制關系

5. 從庫只讀狀態

PGSQL

系統自動設置從庫默認只讀,不需要人工介入,維護簡單

MySQL

從庫需要手動設置參數super_read_only=on,讓從庫設置為只讀,super_read_only參數有bug,鏈接:買粉絲s://jiahao..買粉絲/s?id=1636644783594388753&wfr=spider&for=pc

6. 版本分支

PGSQL

只有社區版,沒有其他任何分支版本,PGSQL官方統一開發,統一維護,社區版有所有功能,不像SQL Server和MySQL有標準版、企業版、經典版、社區版、開發版、web版之分

國內外還有一些基于PGSQL做二次開發的數據庫廠商,例如:Enterprise DB、瀚高數據庫等等,當然這些只是二次開發并不算獨立分支

MySQL

由于歷史原因,分裂為三個分支版本,MariaDB分支、Per買粉絲na分支 、Oracle官方分支,發展到目前為止各個分支基本互相不兼容

Oracle官方分支還有版本之分,分為標準版、企業版、經典版、社區版

7. SQL特性支持

PGSQL

SQL特性支持情況支持94種,SQL語法支持最完善,例如:支持公用表表達式(WITH查詢)

MySQL

SQL特性支持情況支持36種,SQL語法支持比較弱,例如:不支持公用表表達式(WITH查詢)

關于SQL特性支持情況的對比,可以參考:買粉絲://買粉絲.sql-workbench.買粉絲/dbms_買粉絲parison.買粉絲

8. 主從復制安全性

PGSQL

同步流復制、強同步(remote apply)、高安全,不會丟數據

PGSQL同步流復制:所有從庫宕機,主庫會罷工,主庫無法自動切換為異步流復制(異步模式),需要通過增加從庫數量來解決,一般生產環境至少有兩個從庫

手動解決:在PG主庫修改參數synchronous_standby_names ='',并執行命令: pgctl reload ,把主庫切換為異步模式

主從數據完全一致是高可用切換的第一前提,所以PGSQL選擇主庫罷工也是可以理解

MySQL

增強半同步復制 ,mysql5.7版本增強半同步才能保證主從復制時候不丟數據

mysql5.7半同步復制相關參數:

參數rpl_semi_sync_master_wait_for_slave_買粉絲unt 等待至少多少個從庫接收到binlog,主庫才提交事務,一般設置為1,性能最高

參數rpl_semi_sync_master_timeout 等待多少毫秒,從庫無回應自動切換為異步模式,一般設置為無限大,不讓主庫自動切換為異步模式

所有從庫宕機,主庫會罷工,因為無法收到任何從庫的應答包

手動解決:在MySQL主庫修改參數rpl_semi_sync_master_wait_for_slave_買粉絲unt=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 的執行速度

1

搜索关键词: