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

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

2022-10-18 08:06:16 資料庫

背景

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/516462.html

標籤:PostgreSQL

上一篇:PostgreSQL DBA最常用SQL

下一篇:使用BCP + Polybase 實作本地資料遷移到Azure DB

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more