0
Redis vs PostgreSQL

ぬこ@横浜 (@nuko_yokohama)
Redis をちょっと調べてたけど
そういや PostgreSQL と
性能の比較したことなかったな。
そういや redis_fdw もあるな・・・
Redis って何ぞ?
ガンガンガン速な
Key-Value Stroe
C で記述している
オンメモリ前提
基本機能はシンプル
List/Set/Hash/SortedSet
複製 / 分散も一応対応
対応言語多数
DeNA とかで使ってる
kwsk 説明するとそれだけで
20 分(どころじゃない)枠が
必要なので詳細は割愛
http://redis.io/
で、今回は
Redis と PostgreSQL との
格納 / 検索の性能を
ちょっと測ってみた
あくまでもこの結果は
参考程度に留めてね
STAGE :俺のノート PC
Lets'Note CF-SX2(SSD)
CentOS 6.3 on VMWare
測定アプリ:自作 C アプリ
hiredis AP vs libpq AP
Redis の
C-liibrary

Postg...
vs

ROUND 1
データ格納
PosrtgreSQL は TABLE に
INSERT 文で格納する。
Redis は SET コマンドで格納する。
それぞれ 100 万件投入する
時間を測定する。
PostgreSQL : INSERT でデータ投入
INSERT INTO TEST VALUES ('k_NNNNN', 'v_NNNNN');

Redis : SET でデータ投入
SET k_NNNNN v_NNNNN
結果
100 万件 SET 処理時間 (ms)

PostgreSQL( 通常テーブル )

61879

PostgreSQL(UNLOGGED)

60087

Redis

32827

0

10000

20000

30000

4...
PostgreSQL については
ちょっとサボっている。
意外と毎回パースが重いのか?
Prepared Statement なら
もう少し接戦になるかな?
vs

ROUND 2
データ取得
PosrtgreSQL は TABLE に
SELECT 文で取得する。
Redis は GET コマンドで取得する。
それぞれ 100 万件投入する
時間を測定する。
PostgreSQL : SELECT で取得
SELECT value FROM test WHERE key = 'k_NNNNN';

Redis : GET でデータ取得
GET k_NNNNN
結果
100 万件 GET 処理時間 (ms)

PostgreSQL(Prepare あり )

51776

PostgreSQL(Prepare なし )

123998

Redis

31776

0

20000

40000

6...
言うまでもないがこの結果から
Redis TUEEEEEE!
PostgreSQL オワコン
というわけではない。
むしろ両方の使い所を見極めて、
可能なら両方使うのが賢い。
おまけ
redis_fdw
Redis-FDW
https://github.com/pg-redis-fdw/redis_fdw

当然?ながら既に存在している
9.2 以降の IF に対応はしているみたい。
9.3 Writable 対応は不明・・・
ついでに redis_fdw 経由での
検索性能も測定してみたが
とてつもなく遅い!
( FDW 内で pushdown してるのに)
test=# EXPLAIN ANALYZE SELECT key, value FROM test WHE...
あと、 libpq から
Pqprepare() を外部テーブル
に発行すると、そこから返って
こないという問題ががが。
redis_fdw で prepare 対応が
うまくいってないのかも。
おしまい
Upcoming SlideShare
Loading in...5
×

Redis vs postgre sql

1,041

Published on

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

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

No Downloads
Views
Total Views
1,041
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
9
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "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. おしまい
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×