/note/tech

Redis is fast - I'll cache in Postgres

要約:

■ 検証概要と設定

  • 比較対象: RedisとPostgreSQLをキャッシング用途に使用した場合のパフォーマンスを比較検証。
  • 環境設定: Kubernetes上で、PostgresまたはRedisを2CPU/8GiBメモリに制限し、デフォルト設定で実行。
  • データセット: 事前に3000万件のデータを投入し、GET(取得)、SET(設定)、混合(Read/Write)の3種のワークロードで性能を測定。

■ パフォーマンス検証結果

  • 総合性能: すべてのワークロード(GET/SET/混合)において、RedisがPostgreSQLよりも高速な結果となった。
  • Redis側のボトルネック: Redisの処理能力ではなく、HTTPサーバー側のCPUが上限に達したことがボトルネックとなっていた。
  • PostgreSQL側のボトルネック: 制限された2コアのCPUを使い切り、PostgreSQL側がボトルネックとなっていた。
  • 非ログ記録テーブルの効果: PostgreSQLで非ログ記録テーブルを使用することで、特に書き込み(SET)性能は大幅に改善されたが、Redisの速度には及ばなかった。

■ 筆者の結論と考察

  • 速度の優位性: RedisがPostgreSQLより高速であるという事実は認めている。
  • 依存関係の削減: ほとんどのプロジェクトではPostgreSQLの性能で十分であり、Redisという新しい依存関係を追加しないことの利点を重視するため、Postgresを使い続ける。
  • 性能の評価: Postgresの性能(7425リクエスト/秒、1日5億件以上のリクエストに相当)は、大半のプロジェクトの要件を満たす十分なものである。
  • 柔軟な設計: キャッシュにインターフェースを設けておくことで、将来的に性能不足が生じた際にRedisへの切り替えを容易に行えるようにする。

MEMO: