Redis vs postgre sql

1,755 views

Published on

PostgreSQL and Reids Store(INSERT/SET) and Get(SELECT/GET) performance.
PostgreSQLとRedisの格納と検索性能をちょっと測ってみた。

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,755
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
10
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Redis vs postgre sql

  1. 1. Redis vs PostgreSQL ぬこ@横浜 (@nuko_yokohama)
  2. 2. Redis をちょっと調べてたけど そういや PostgreSQL と 性能の比較したことなかったな。 そういや redis_fdw もあるな・・・
  3. 3. Redis って何ぞ?
  4. 4. ガンガンガン速な Key-Value Stroe
  5. 5. C で記述している オンメモリ前提 基本機能はシンプル List/Set/Hash/SortedSet 複製 / 分散も一応対応 対応言語多数 DeNA とかで使ってる
  6. 6. kwsk 説明するとそれだけで 20 分(どころじゃない)枠が 必要なので詳細は割愛 http://redis.io/
  7. 7. で、今回は Redis と PostgreSQL との 格納 / 検索の性能を ちょっと測ってみた あくまでもこの結果は 参考程度に留めてね
  8. 8. STAGE :俺のノート PC Lets'Note CF-SX2(SSD) CentOS 6.3 on VMWare 測定アプリ:自作 C アプリ hiredis AP vs libpq AP Redis の C-liibrary PostgreSQL の C-liibrary
  9. 9. vs ROUND 1 データ格納
  10. 10. PosrtgreSQL は TABLE に INSERT 文で格納する。 Redis は SET コマンドで格納する。 それぞれ 100 万件投入する 時間を測定する。
  11. 11. PostgreSQL : INSERT でデータ投入 INSERT INTO TEST VALUES ('k_NNNNN', 'v_NNNNN'); Redis : SET でデータ投入 SET k_NNNNN v_NNNNN
  12. 12. 結果 100 万件 SET 処理時間 (ms) PostgreSQL( 通常テーブル ) 61879 PostgreSQL(UNLOGGED) 60087 Redis 32827 0 10000 20000 30000 40000 50000 60000 70000 やはり Redis はえーな でも、 PostgreSQL も結構健闘している( INDEX 込みだし) UNLOGGED の効果は思ったほどでもない・・・
  13. 13. PostgreSQL については ちょっとサボっている。 意外と毎回パースが重いのか? Prepared Statement なら もう少し接戦になるかな?
  14. 14. vs ROUND 2 データ取得
  15. 15. PosrtgreSQL は TABLE に SELECT 文で取得する。 Redis は GET コマンドで取得する。 それぞれ 100 万件投入する 時間を測定する。
  16. 16. PostgreSQL : SELECT で取得 SELECT value FROM test WHERE key = 'k_NNNNN'; Redis : GET でデータ取得 GET k_NNNNN
  17. 17. 結果 100 万件 GET 処理時間 (ms) PostgreSQL(Prepare あり ) 51776 PostgreSQL(Prepare なし ) 123998 Redis 31776 0 20000 40000 60000 80000 100000 120000 140000 やはり Redis はえーな(二回目) SELECT が思ったよりも遅いか・・・ まあ Prepared にすれば結構改善したか。
  18. 18. 言うまでもないがこの結果から Redis TUEEEEEE! PostgreSQL オワコン というわけではない。 むしろ両方の使い所を見極めて、 可能なら両方使うのが賢い。
  19. 19. おまけ redis_fdw
  20. 20. Redis-FDW https://github.com/pg-redis-fdw/redis_fdw 当然?ながら既に存在している 9.2 以降の IF に対応はしているみたい。 9.3 Writable 対応は不明・・・
  21. 21. ついでに redis_fdw 経由での 検索性能も測定してみたが とてつもなく遅い! ( FDW 内で pushdown してるのに) test=# EXPLAIN ANALYZE SELECT key, value FROM test WHERE key = 'k_000009'; QUERY PLAN -------------------------------------------------------------------------------------------------------------------Index Scan using test_key_idx on test (cost=0.42..8.44 rows=1 width=18) (actual time=0.018..0.019 rows=1 loops=1) Index Cond: (key = 'k_000009'::text) Total runtime: 0.035 ms (3 rows) test=# EXPLAIN ANALYZE SELECT key, value FROM test_fdw WHERE key = 'k_000009'; QUERY PLAN ------------------------------------------------------------------------------------------------------Foreign Scan on test_fdw (cost=0.00..0.00 rows=0 width=64) (actual time=0.161..0.162 rows=1 loops=1) Filter: (key = 'k_000009'::text) Foreign Redis Database Size: 1000000 Total runtime: 117.257 ms (4 rows) 1+1 は 2 じゃねえ! 200 だ! 10 倍だぞ 10 倍! (検索性能が)
  22. 22. あと、 libpq から Pqprepare() を外部テーブル に発行すると、そこから返って こないという問題ががが。 redis_fdw で prepare 対応が うまくいってないのかも。
  23. 23. おしまい

×