PostgreSQL、Redis與Memcached的效能比較 - CYBERTEC
測試設定的一些特徵:
- AMD Ryzen 3600 CPU 設定為效能模式。我的測試指令碼本質上是同步的,即基本上使用單個 CPU 核心,所以速度可能很重要。
- Ubuntu 20.04 桌面作為作業系統,禁用交換。
- PostgreSQL v13.3,即最新的。
- 預設 PostgreSQL 配置:“shared_buffers=512MB”、“track_io_timing=on”、“shared_preload_libraries='pg_stat_statements'”。
- 用於系統和資料庫的單個 NVMe SSD。
- 使用準備好的語句讀取/寫入 Postgres 以獲得最佳查詢效能,避免解析後續呼叫。
- 完全適合 PostgreSQL 管理快取(共享緩衝區)的資料集大小。
- 非同步模式用於寫入資料,這意味著在伺服器崩潰/重啟的情況下,最近的資料可能會略有丟失,作為更多寫入(尤其是在小事務中)效能的權衡。但這與 Redis 和 Memcached 預設處理寫入的方式一致。不過,使用 Redis,還可以啟用 AOF 永續性以獲得 PostgreSQL 預設行為。
- 兩個讀/寫測試都從 1 到$rows一一遍歷所有插入的隨機生成的浮點資料鍵。
- 鍵值表在讀取測試之前被提取到 Postgres 快取中,因此不會像 Redis/Memcached 那樣有冷快取效應。
- 我沒有測量 Postgres 的記憶體使用情況,因為在插入和快取所有資料之後,對於這個用例,這預計會非常穩定。
- 執行時間記錄在應用程式端,並呼叫系統時鐘以匹配原始測試。請注意,我決定從伺服器端測量執行時間也是為了更好地瞭解“浪費”的數量,因為畢竟 Python 並不是效能測試的最佳選擇,原因有很多,我不想在這裡深入研究. 再往前走一點——結果確實非常可怕,人們不應該使用 Python 來對資料庫進行基準測試——很多 CPU 時間就在某處消失了!
- 完整的測試指令碼可在此處獲得。執行大約需要 10-15 分鐘。基本上是這樣的:
CREATE UNLOGGED TABLE kv_test(key text, value int); CREATE INDEX ON kv_test (key); -- pseudo-code from the Python script for $ROWS in [1000, 10000, 100000, 1000000]: truncate kv_test generate $ROWS random values for $i := 1 .. $ROWS: insert $key into kv_test ($rand[i], $rand[i]) vacuum analyze the table for $i := 1 .. $ROWS: select * from kv_test where key = $rand[i] |
PostgreSQL vs Redis vs Memcached:寫操作
寫入鍵值對的計算時間以毫秒為單位。
資料庫 1,000行 10,000行 100,000行 1,000,000行 Redis (v3.0.7) 34 214 1,666 14,638 Memcached (v1.4.14) 23 100 276 2,813 PostgreSQL (v13.3) 29.6 304 2,888 31,230 |
PostgreSQL vs Redis vs Memcached:讀操作
計算的讀取鍵值對的時間(毫秒)。
資料庫 1,000 10,000 100,000 1,000,000 Redis (v3.0.7) 8 6 8 8 Memcached (v1.4.14) 9 14 14 30 PostgreSQL (v13.3) 0.026 0.028 0.027 0.029 |
Postgres 的讀測試結果領先,看起來非常好!與 Postgres 相比,Redis/Memcached 的平均鍵讀取時間似乎太慢了。我懷疑他們仍然使用遠端機器作為快取。
寫入操作方面,Postgres 對於 100k 和 1M 行記錄寫入,僅比 Redis 慢 2 倍。
快取的主要思想是,與無論如何寫入/更新相比,只有當我們從它們中讀取更多內容時,它們才有用!
很高興看到 Postgres 對不斷增長的資料集的響應的相對穩定性非常非常好!甚至擊敗了在 100 萬行讀取慢2 倍的 Memcached!
這一切都可能表明,為 PostgreSQL 選擇的演算法在數學上是合理的,並且實現得很好!
banq注:不能忽視Redis/Memcached分散式伸縮擴充套件能力。
相關文章
- 【Redis與Memcached比較】Redis
- Redis 和 Memcached 比較Redis
- 對比 Redis 與 MemcachedRedis
- Memcached 及 Redis 架構分析和比較Redis架構
- Memcached 與 Redis 實現的對比Redis
- memcached與redis實現的對比Redis
- PostgreSQL與MySQL比較MySql
- PostgreSQL與MySQL的比較 - hackrMySql
- PostgreSQL與Rust的聚合實現比較SQLRust
- Redis工作系列之一 與 Memcached對比理解Redis
- Redis與Memcached的區別Redis
- 大偏移量下Redis與MongoDB的分頁/排名效能比較RHRedisMongoDB
- Java JIT與AOT效能比較 - foojayJava
- PHP autoload與include效能比較PHP
- 初試redis,比memcached快10倍速Redis
- 記憶體快取系統memcached與redis實現的對比記憶體快取Redis
- 談談Memcached與Redis(四)Redis
- Redis的配置及與memcached區別Redis
- WCF與ASP.NET Core效能比較ASP.NET
- Apache與Nginx的優缺點、效能比較,到底選擇哪個比較好?ApacheNginx
- Caddy 與 Nginx的基準效能比較 - tjllNginx
- Node.js與Io.js的效能比較Node.js
- MongoDB和Redis比較。MongoDBRedis
- 全面對比 Redis 和 Memcached 的 6 點區別Redis
- PostgreSQL TPROC-C基準測試:PostgreSQL 12與PostgreSQL 13效能對比SQL
- MySQL中MyISAM引擎與InnoDB引擎效能比較MySql
- Wicket、Grails與JSF/seam, tapestry效能比較AIJS
- JAVA IO效能比較Java
- 批量更新效能比較
- Redis的Java客戶端比較:絕地武士與生菜RedisJava客戶端
- Redis vs. MongoDB比較RedisMongoDB
- etcd和redis比較Redis
- 360°全方位比較PostgreSQL和MySQLMySql
- 資料庫比較 PostgreSQL vs MongoDB資料庫SQLMongoDB
- Memcached與Redis有什麼區別Redis
- MRAM與常用計算機記憶體的效能比較計算機記憶體
- PHP file_get_contents 與 curl 效能比較PHP
- json解析效能比較(gson與jackson)JSON