## 4. データベース・データ層

確認：2026年9月

### 4-1. DB本体とホスティング

| 役割 | 既定 | 代替と乗り換え条件 |
|---|---|---|
| RDB | **PostgreSQL** | MySQL：既存システムとの互換が必要なときのみ |
| 本番ホスティング（AWS） | **Amazon RDS for PostgreSQL** | Aurora PostgreSQL：読み取り負荷が高くレプリカを多用する、または高可用性の要件が厳しいとき |
| 本番ホスティング（PaaS） | **Neon**（ブランチ機能でPRごとにDBを複製できる） | Supabase：認証・ストレージ・リアルタイムも一緒に欲しいとき。NeonはDatabricksの傘下に入った |
| 小規模・個人 | **SQLite**（Railsの単一サーバー構成、Cloudflare D1） | — |
| コネクションプール | **RDS Proxy**（AWS）／ **PgBouncer**（自前） | Neon・Supabaseは組み込みのプーラーを使う |
| バックアップ | **マネージドの自動バックアップ＋ポイントインタイムリカバリ有効化** | pgBackRest：自前運用のとき |
| バックアップ（SQLite） | **Litestream**（S3／R2へ継続的にレプリケーション） | — |

### 4-2. 周辺ツール

| 役割 | 既定 | 代替と乗り換え条件 |
|---|---|---|
| GUIクライアント | **TablePlus** | DBeaver：無償で多機能なものが必要なとき |
| マイグレーションの安全性チェック | **Squawk**（ロックを取る危険なALTERを検出） | — |
| スキーマ可視化 | **tbls**（スキーマからドキュメントとER図を生成） | — |
| テストデータ | 各言語のファクトリ／シード | — |
| 本番データの匿名化 | **pg_dump後にスクリプトで置換** | PostgreSQL Anonymizer：頻繁に必要なとき |

### 4-3. Postgresで済ませる範囲

| 用途 | Postgresでの手段 | 専用ツールへの乗り換え条件 |
|---|---|---|
| ジョブキュー | River（Go）、Solid Queue（Rails）、pg-boss（TS） | §23-1 の目安を超える（Goは秒間数千件、Rails・TSは秒間数百件） → Redis系／SQS |
| 全文検索（日本語） | **pg_bigm**（2文字単位の部分一致、日本語に強い） | 表記揺れ・ファセット・高速サジェストが必要 → Meilisearch |
| ベクトル検索 | **pgvector** | 数千万件以上・専用のフィルタリング要件 → Qdrant |
| キャッシュ | Solid Cache（Rails） | 低レイテンシ必須 → Valkey/Redis |
| Pub/Sub | LISTEN/NOTIFY | 大量配信 → 専用基盤 |

### 4-4. キャッシュ・キュー・ストリーム

| 役割 | 既定 | 代替と乗り換え条件 |
|---|---|---|
| インメモリKVS | **Valkey**（Redis互換のOSS。AWSではElastiCache for Valkey） | Redis：既存資産 |
| マネージドキュー（AWS） | **SQS** | — |
| イベント配信（AWS） | **EventBridge** | SNS：単純なファンアウトだけのとき |
| ストリーム | 基本的に不要 | Kafka（MSK）／Redpanda：大量のイベントを複数サービスで再処理する要件があるとき |
| ワークフロー | **Temporal**（長時間・複雑なもの） | Inngest：サーバーレス環境。AWS Step Functions：AWS内で完結させたいとき |
