資料庫選型思考(PostgreSQL,MySQL,Oracle)

来源:https://www.cnblogs.com/88223100/archive/2022/10/17/Thoughts-on-database-selection-PostgreSQL_MySQL_Oracle.html
-Advertisement-
Play Games

資料庫選型是一件很大的事情,也是一件很頭疼的事情。 很多企業並沒有資料庫的選型標準,或者並不瞭解業務需要什麼樣的資料庫。 很多企業的資料庫是開發說了算,熟悉什麼就用什麼,很多選型失誤,導致後期非常尷尬的局面。 那麼資料庫選型要註意什麼呢? 列舉一些例子,取自如下文檔 ...


背景

https://www.enterprisedb.com/blog/postgresql-vs-mysql-360-degree-comparison-syntax-performance-scalability-and-features

資料庫選型是一件很大的事情,也是一件很頭疼的事情。

很多企業並沒有資料庫的選型標準,或者並不瞭解業務需要什麼樣的資料庫。

很多企業的資料庫是開發說了算,熟悉什麼就用什麼,很多選型失誤,導致後期非常尷尬的局面。

那麼資料庫選型要註意什麼呢?

列舉一些例子,取自如下文檔

《資料庫選型的關鍵指標》

選型維度

功能差異

1. 遞歸查詢, connect by, 樹形查詢

PostgreSQL 通過(with 或 tablefunc支持)支持例子

https://yq.aliyun.com/articles/240

http://www.postgresql.org/docs/9.5/static/tablefunc.html

2. 視窗查詢, window over

PostgreSQL 支持例子

http://blog.163.com/digoal@126/blog/static/16387704020137154137930

http://blog.163.com/digoal@126/blog/static/16387704020121024102312302/

http://blog.163.com/digoal@126/blog/static/16387704020124239390354/

http://www.postgresql.org/docs/9.5/static/functions-window.html

3. rollup, grouping sets, cube

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-GROUPING-SETS

http://blog.163.com/digoal@126/blog/static/16387704020154269591874/

4. 高級聚合(json,數組,相關性,標準差(採樣,全局),截距,斜率,方差(採樣,全局),mode,percentile_cont,distc,rank,dense_rank,percent_rank,cume_dist,grouping)

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/functions-aggregate.html

http://blog.163.com/digoal@126/blog/static/1638770402015224124337/

http://blog.163.com/digoal@126/blog/static/1638770402015379286873/

http://blog.163.com/digoal@126/blog/static/16387704020153713222764

4. hash join, merge join, nestloop join

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/xoper-optimization.html

http://www.postgresql.org/docs/9.5/static/planner-optimizer.html

5. 哈希聚合

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/runtime-config-query.html#RUNTIME-CONFIG-QUERY-ENABLE

6. 事務間共用事務快照

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/functions-admin.html#FUNCTIONS-SNAPSHOT-SYNCHRONIZATION

http://www.postgresql.org/docs/9.5/static/sql-set-transaction.html

http://www.postgresql.org/docs/9.5/static/app-pgdump.html

http://blog.163.com/digoal@126/blog/static/163877040201326829943/

http://blog.163.com/digoal@126/blog/static/163877040201241134721101/

7. 展開式索引(支持多列任意組合查詢)

PostgreSQL 支持例子

《寶劍贈英雄 - 任意組合欄位等效查詢, 探探PostgreSQL多列展開式B樹》

約束

1. foreign key

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/ddl-constraints.html

2. for no key update, for key share 粒度鎖

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/explicit-locking.html#LOCKING-ROWS

http://blog.163.com/digoal@126/blog/static/16387704020130249109133/

http://blog.163.com/digoal@126/blog/static/16387704020130305109687/

3. check 約束

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/ddl-constraints.html

4. exclusion 約束

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/ddl-constraints.html

易用性

1. 表空間

2. alter 列值轉表達式

(alter table alter column c1 type newtype using (expression(...)) )

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/sql-altertable.html

https://yq.aliyun.com/articles/30470

3. alter table 需要重組表的操作

PostgreSQL少量操作需要重組

vacuum full, cluster, 修改欄位數據類型, (修改長度不需要重組表)

http://www.postgresql.org/docs/9.5/static/sql-altertable.html

4. 分區表

《PostgreSQL 9.5+ 高效分區表實現 - pg_pathman》

《PostgreSQL 10.0 內置分區表》

5. 物化視圖

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/sql-creatematerializedview.html

6. 物化視圖增量刷新

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/sql-refreshmaterializedview.html

7. 表繼承關係

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/tutorial-inheritance.html

8. 使用 like 建結構類似的表

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/sql-createtable.html

開發功能

1. 客戶端開發語言支持

C, java, python, ...

2. 函數

返回 void, 單行,SRF,事件觸發器(MySQL 不支持),觸發器

例子

http://blog.163.com/digoal@126/blog/static/16387704020132131361949/

http://www.postgresql.org/docs/9.5/static/event-triggers.html

3. 2PC

4. 服務端綁定變數

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/sql-prepare.html

5. savepoint

6. 非同步消息

PostgreSQL 支持例子

http://www.postgresql.org/docs/9.5/static/sql-notify.html

http://www.postgresql.org/docs/9.5/static/sql-listen.html

7. 游標

數組FOR迴圈,query FOR迴圈,游標FOR迴圈

PostgreSQL 全面支持例子

http://www.postgresql.org/docs/9.5/static/plpgsql-control-structures.html

http://www.postgresql.org/docs/9.5/static/plpgsql-cursors.html

(MySQL 暫不支持數組)

類型

1. 數據類型

1.1 PostgreSQL

高精度numeric, 浮點, 自增序列,貨幣,位元組流,時間,日期,時間戳,布爾,枚舉,平面幾何,立體幾何,多維幾何,地球,PostGIS,網路,比特流,全文檢索,UUID,XML,JSON,數組,複合類型,域類型,範圍,樹類型,化學類型,基因序列,FDW, 大對象, 圖像

1.2 MySQL

數字,時間,字元串,簡單的GIS,JSON

2. 支持索引的數據類型

2.1 PostgreSQL

高精度numeric, 浮點, 自增序列,貨幣,位元組流,時間,日期,時間戳,布爾,枚舉,平面幾何,立體幾何,多維幾何,地球,PostGIS,網路,比特流,全文檢索,UUID,XML,JSON,數組,複合類型,域類型,範圍,樹類型,化學,基因序列

2.2 MySQL

數字,字元串,比特流,時間,全文檢索,GIS

索引支持

1. 索引方法

PostgreSQL 支持 btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引

MySQL 支持 btree, gis類型索引

2. 規則表達式、前後模糊查詢,支持索引檢索

PostgreSQL 支持

3. 數組支持索引

PostgreSQL 支持

4. 全文檢索支持索引

5. 索引擴展功能

5.1 PostgreSQL 支持 表達式索引,部分索引,聯合索引

5.2 PostgreSQL 支持圖像相似度、文本相似度搜索

5.3 自定義索引訪問方法(bloom, rum, ......)

PostgreSQL支持

多引擎和外部源支持

1. 多引擎支持

1.1 PostgreSQL

內置heap, 通過插件實現記憶體表, 列存儲, 壓縮存儲, 流式存儲, 非關係存儲等。

1.2 MySQL

MyISAM, innodb, ...

2. 外部表

PostgreSQL支持任意外部數據源, (例如jdbc, file, odbc, oracle, mysql, db2, redis, mongo, ES, hadoop......)

https://wiki.postgresql.org/wiki/Fdw

3. dblink

PostgreSQL 支持

4. 記憶體表

PostgreSQL 通過外部表支持,或者通過插件支持

5. ES(彈性搜索引擎) 引擎

PostgreSQL 支持

安全

1. 數據加密

PostgreSQL 支持加密數據類型,可選GPG加密演算法

2. 認證方法

PostgreSQL 支持 密碼、LDAP、AD、GSSAPI、SSPI、Ident、Peer、RADIUS、PAM、簽名認證

3. 數據傳輸加密

PostgreSQL 支持

4. 行安全策略

PostgreSQL 支持

5. 資料庫內部支持libselinux介面, (美國國家安全局制定的安全加強標準)

PostgreSQL 支持

優化器

http://www.postgresql.org/docs/9.5/static/runtime-config-query.html

1. GPU 並行計算支持

PostgreSQL 支持

2. 遺傳優化器演算法

PostgreSQL 支持CBO、CRO、遺傳演算法

3. HINT PLAN

4. CPU 並行計算

PostgreSQL 支持 (線性性能提升)

5. 自定義成本因數

PostgreSQL 支持

編程擴展

1. 是否支持採樣查詢

PostgreSQL 支持

2. 是否支持擴展採樣演算法

PostgreSQL 支持

3. 自定義數據類型

PostgreSQL 支持

4. 自定義索引方法

PostgreSQL 支持

5. 字元集自動轉換, C擴展介面

PostgreSQL 支持

6. 自定義聚合

PostgreSQL 支持

7. 自定義視窗

PostgreSQL 支持

擴展能力

1. 類型擴展,操作符擴展,函數擴展,索引方法擴展,索引擴展,

PostgreSQL 支持

2. C觸發器函數, C事件觸發器函數

PostgreSQL 支持

3. 函數語言擴展

PostgreSQL 支持擴展函數支持介面, erlang, ....

4. 機器學習庫

PostgreSQL 支持

5. 流式計算

PostgreSQL 支持

性能

《資料庫界的華山論劍 tpc.org》

《facebook linkbench 測試PostgreSQL社交關係圖譜場景性能》

《PostgreSQL 主機性能測試方法 - 單機多實例》

《PostgreSQL 主機性能測試方法 - 單機單實例》

《PostgreSQL 源碼性能診斷(perf profiling)指南》

《"物聯網"流式處理應用 - 用PostgreSQL實時處理(萬億每天)》

《PostgreSQL 百億地理位置數據 近鄰查詢性能》

《PostgreSQL 百億數據 秒級響應 正則及模糊查詢》

《PostgreSQL 1000億數據量 正則匹配 速度與激情》

《恭迎萬億級營銷(圈人)瀟灑的邁入毫秒時代 - 萬億user_tags級實時推薦系統資料庫設計》

《從難纏的模糊查詢聊開 - PostgreSQL獨門絕招之一 GIN , GiST , SP-GiST , RUM 索引原理與技術背景》

《分析加速引擎黑科技 - LLVM、列存、多核並行、運算元復用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》

服務端編程語言

1. 函數(過程)語言

PostgreSQL支持幾乎所有的地球編程語言,你可以用他們在資料庫中編寫UDF

plpgsql, sql, c, c++, java, javascript, R, python, perl, php, tcl, ruby, lua, ...

scale out

1. PostgreSQL完全支持以下下推功能

支持聚合運算元下推

支持WHERE條件下推

支持JOIN下推

支持SORT下推

支持SELECT 子句下推

支持跨數據源JOIN

scale up能力

PostgreSQL

資源管控能力強。

單實例可以充分發揮HPC的性能,有多少資源就能使用多少資源。

可用性、可靠性

PostgreSQL

PIRT,任意時間點恢復;FPW;

物理、邏輯級流式複製;金融級多副本;

技術儲備

社區、生態

社區狀態

PostgreSQL

單一開源分支,社區力量較集中。全球有1000名以上的內核研發人員。

社區研發由核心組員和committer組成,持續5年以上對社區版本有貢獻內核研發人員超過50位。

社區核心人員分別來自資料庫廠商,資料庫支持和服務公司,資料庫最終用戶的公司,形成了一個非常好的力量均衡。

社區活躍度

PostgreSQL

非常活躍(see git.postgresql.org, github.com/postgres)

學習成本

維護成本

平臺相容性

代碼成熟度

應用場景、案例

開源許可

全球發展前景

詳細文檔參考

《資料庫選型的關鍵指標》

《PostgreSQL 生態;原理、案例、開發實踐、管理實踐、學習資料、視頻 - 珍藏級》

https://www.2ndquadrant.com/en/blog/postgresql-is-the-worlds-best-database/

 

 作者丨digoal

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Thoughts-on-database-selection-PostgreSQL_MySQL_Oracle.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學會了技術就要使用,否則很容易忘記,因為自然界壓根就不存在什麼代碼、變數之類的玩意,這都是一些和生活常識格格不入的東西。只能多用多練,形成肌肉記憶才行。 在一次實際的產品開發中,由於業務需求的緣故,需要使用Elasticsearch搜索引擎。搜索引擎是通過索引和文檔檢索數據的,索引類似於MySQL的 ...
  • 首先依賴註入 懶得下載autofac了 直接用程式集進行批量註入 private static WebApplicationBuilder builder; internal static void Load(WebApplicationBuilder web) { builder = web; b ...
  • 前面簡單介紹了騰訊雲的由來和定義,本編介紹騰訊的簡單使用(我這個展示的是把最近寫的vs項目部署到雲服務中): 1、首先根據前面的定義註冊個騰訊雲賬戶,然後購買個雲伺服器,當然首次註冊的都有免費體驗資格,我這裡用到的是免費體驗輕量式伺服器: 進入購買然後開通就會顯示在你的輕量伺服器上,會根據你選的wi ...
  • 有這個想法的初衷 喜歡電子和DIY硬體的朋友對稚暉君應該都不陌生,他定期都會分享一些自己做的好玩的硬體,他之前做了一個ElectronBot桌面機器人我就很感興趣,所以就自己也做了一個。 起初我只是自己開發了一個叫電子腦殼的上位機軟體,大家在之前的博客里應該也有見到,是個用WinUI(WASDK)開 ...
  • 一、 先決條件 1.Azure Repos Git/Git和項目上傳 把本地的Net Core項目上傳至Azure Repos Git/Git 2.Docker Registry Service Connection/Azure subscription和Azure Container Regist ...
  • keepalived實現nginx負載均衡機高可用 環境說明: | 系統 | 主機名 | IP | 服務 | | | | | | | centos8 | master | 192.168.111.141 | nginxkeepalived | | centos8 | backup | 192.168 ...
  • 摘要:近日,華為雲GaussDB企業級分散式資料庫內核正式通過了全球知名獨立認證機構歐洲SGS Brightsight實驗室的安全評估,獲得全球權威信息技術安全性評估標準CC EAL4+級別認證。 本文分享自華為雲社區《中國首個,我們拿下了!業界最高級別!華為雲GaussDB資料庫榮獲國際CC EA ...
  • 摘要:本文主要描述下函數在滿足特征的前提下可以把函數屬性定義為下推屬性。 本文分享自華為雲社區《GaussDB(DWS)性能調優:函數下推》,作者:譡里個檔 。 DWS作為MPP架構的數倉產品,其性能優勢主要在分散式計算上。預設情況下,DWS為了保證結果的正確性,自定義函數預設屬性是不下推的,這會導 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...