Documents
Home

09 DB 同期仕様

9.1 通常時の同期

自宅鯖の PostgreSQL(マスター)への書き込みと同時に Turso + Cloudflare D1 へ即時同期する。

書き込みリクエスト(BOT / WebUI)
    ↓
自宅鯖 API
    ↓ 即時
PostgreSQL(マスター)
    ↓ 即時同期
Turso + Cloudflare D1(ミラー)

9.2 CF 障害時の動作

Google ping ✅ / Cloudflare ping ❌ と判定された場合:

CF 障害復旧時

PostgreSQL 全量を Turso + D1 へ再同期(キューなし・全量方式)。

CF 障害復旧を検知
    ↓
PostgreSQL → Turso 全量再同期
PostgreSQL → D1 全量再同期

9.3 自宅鯖ダウン時の動作

Tunnel 切断を検知し、CF Pages WebUI へリダイレクト。


9.4 自宅鯖復旧時のマージロジック

ネットワーク監視(ping)が復旧を検知後、以下の手順で PostgreSQL を最新化する。

復旧検知(3 回連続 ping 成功・90 秒後確定)
    ↓
Turso → 自宅鯖内コピー DB(Turso コピー)
D1   → 自宅鯖内コピー DB(D1 コピー)
    ↓ タイムスタンプ・データ比較(レコード単位)
    ├── Turso コピーと D1 コピーの両方に同じレコード → PostgreSQL へ書き込み
    ├── 片方のみにあるレコード → 両方のコピーに書き込み後 PostgreSQL へ
    └── 両方にないレコード → 無視
    ↓
PostgreSQL 最新化
    ↓
Turso + D1 全量再同期

比較ルール

状態 処理
Turso・D1 両方に同じ PostgreSQL へ書き込み
片方のみに存在 存在しない方へ書き込み → PostgreSQL へ書き込み
両方に存在しない 無視

9.5 バックアップ同期

日次で PostgreSQL を GitHub へダンプ・push する。
詳細は 13_operation.md を参照。