性能比拼: MySQL vs PostgreSQL
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
本內(nèi)容是對(duì)知名性能評(píng)測(cè)博主 Anton Putra MySQL vs PostgreSQL Performance Benchmark (Latency - Throughput - Saturation)[1] 內(nèi)容的翻譯與整理, 有適當(dāng)刪減, 相關(guān)指標(biāo)和結(jié)論以原作為準(zhǔn) MySQL vs PostgreSQL 數(shù)據(jù)庫(kù)性能對(duì)比在本內(nèi)容中,我們將對(duì)比 MySQL 和 PostgreSQL 關(guān)系型數(shù)據(jù)庫(kù)的性能。我們將運(yùn)行一系列測(cè)試,其中 第一項(xiàng)測(cè)試 重點(diǎn)關(guān)注 數(shù)據(jù)寫(xiě)入(ingestion)效率。 首先,我們會(huì)測(cè)量:
此外,我們還會(huì)測(cè)量:
值得一提的是,這兩種數(shù)據(jù)庫(kù)在這些方面的差異 非常大。 最后,我們將評(píng)估 數(shù)據(jù)庫(kù)的連接池(connection pool),觀察它們?nèi)绾喂芾聿迦霐?shù)據(jù)的連接。 在 第二項(xiàng)測(cè)試 中,我們將測(cè)量 數(shù)據(jù)讀取(retrieval) 的效率。 我使用的是當(dāng)前最新版本:
測(cè)試設(shè)計(jì)為了進(jìn)行測(cè)試,我在 兩個(gè)數(shù)據(jù)庫(kù) 中分別創(chuàng)建了 兩張表,具體的 SQL 語(yǔ)句如下。 假設(shè)我們有一個(gè) 分析系統(tǒng)(analytics backend),用于記錄 用戶(hù)在網(wǎng)站上的行為,例如:
數(shù)據(jù)庫(kù)中有兩張表:
第一項(xiàng)測(cè)試: 第二項(xiàng)測(cè)試:
如果你有任何關(guān)于 改進(jìn)測(cè)試設(shè)計(jì) 的建議,請(qǐng)告訴我! 代碼概覽在客戶(hù)端編寫(xiě)方面,我選擇使用 Golang,因?yàn)椋?/span>
為了讓 MySQL 和 PostgreSQL 的測(cè)試盡可能公平,我使用 database/sql 接口 進(jìn)行數(shù)據(jù)庫(kù)操作,而不是直接使用 pgx 驅(qū)動(dòng)(盡管 pgx 可能會(huì)降低查詢(xún)延遲)。 此外,我確保:
如果你有任何改進(jìn)建議,請(qǐng)告訴我,或者更好的是,提交一個(gè) Pull Request! 第一項(xiàng)測(cè)試:數(shù)據(jù)寫(xiě)入現(xiàn)在,我們開(kāi)始 第一項(xiàng)測(cè)試。 這次測(cè)試 總共持續(xù)了近 3 小時(shí),但我會(huì)將其壓縮至 幾分鐘 展示。
你可以在 右上方的圖表 看到 每秒查詢(xún)數(shù)(QPS),而 左側(cè)圖表 顯示的是 從客戶(hù)端測(cè)量的插入延遲。 測(cè)試結(jié)果:
最大區(qū)別:
連接池情況:
臨界點(diǎn):
第一項(xiàng)測(cè)試:數(shù)據(jù)分析現(xiàn)在,我們查看 整個(gè)測(cè)試期間的數(shù)據(jù):
第二項(xiàng)測(cè)試:數(shù)據(jù)讀取在運(yùn)行 第二項(xiàng)測(cè)試 之前,我為 MySQL 額外添加了一些記錄,使其與 PostgreSQL 的數(shù)據(jù)量保持一致。 測(cè)試內(nèi)容:
磁盤(pán)讀取數(shù)據(jù)問(wèn)題:
測(cè)試結(jié)果:
臨界點(diǎn):
結(jié)論:
第二項(xiàng)測(cè)試:數(shù)據(jù)分析現(xiàn)在,我們查看 整個(gè)測(cè)試期間的數(shù)據(jù):
MySQL vs PostgreSQL Performance Benchmark (Latency - Throughput - Saturation): 閱讀原文:原文鏈接 該文章在 2025/4/9 12:01:24 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |