Redisは必要か? PostgreSQLがキューイング、ロッキング、そして pub/sub 機能を提供してくれるのに(2021)
(spin.atomicobject.com)-
ユースケース 1: ジョブキューイング
- Redis は Web サービスでバックグラウンドジョブを調整するためによく使われる。
- PostgreSQL 9.5 以降では
SKIP LOCKEDオプションを使ってジョブキューイングを実装できる。 - このオプションにより、ロック待ちなしでジョブを選択でき、複数のワーカーが同じジョブを同時に処理しないことを保証する。
-
ユースケース 2: アプリケーションロック
- Redis は分散ロックによく使われる。
- PostgreSQL のアドバイザリロックを使って同じ機能を実装できる。
- アドバイザリロックにより、PostgreSQL の内部ロックエンジンをアプリケーション定義の目的で活用できる。
-
ユースケース 3: Pub/Sub
- Redis はイベントをアクティブなクライアントにプッシュするために使われる。
- PostgreSQL 9 以降では
LISTENとNOTIFY文を使って Pub/Sub 機能を提供できる。 - PostgreSQL クライアントは特定のメッセージチャネルを購読でき、別のクライアントがそのチャネルにメッセージを送ると、すべての購読者が通知を受け取る。
-
PostgreSQL をフル活用する
- Redis は PostgreSQL とは異なる用途で使われ、TTL を持つデータのキャッシュや一時的なデータ保存に優れている。
- PostgreSQL は SQL データベース以上の機能を提供しており、Redis を使っていた処理を PostgreSQL で置き換えられる可能性がある。
- 複数のデータサービスを使う複雑さを減らし、運用コストを削減できる有力な選択肢になり得る。
1件のコメント
Hacker Newsの意見
Redisはアプリケーションと同じマシン上で動作すると、非常に高速な応答を提供する。これにより、Postgresとは異なる種類の処理が可能になる
PostgreSQLは単なるSQLデータベース以上の機能を提供する
PGQueuerはPostgreSQLを使ってジョブキュー、ロック、リアルタイム通知を提供する最小限の代替手段である
Postgresは強力なデータベースである
ほとんどのプロジェクトで必要なのはシンプルなジョブキューだけであり、複雑なスタックを簡素化することが重要である
Postgresにはいくつかの制約がある
まずはPostgreSQLで始め、必要になったらRedisに切り替えるのがよい
Postgresのpub/subの大きな欠点は、メッセージサイズが8000バイトに制限されることである
Redisの最も重要な用途の1つであるキャッシュは、Postgresではより複雑になる
Postgresでこれらの機能を使うと、更新とレプリケーションがより難しくなる