## 親Issue - #612 Phase 6 ## 背景 source dump/export用LanceDBの常時同期が、通常利用時にも高いCPU・メモリ負荷を生む。CCIP用LanceDBとは独立に、dump/exportのread modelをPostgreSQLへ移す。 ## 方針 - `(source_id, media_id)` 単位の差分dump cacheをPostgreSQLに持つ。 - 完成済みのdump payloadは `jsonb` とし、schema versionと生成元revisionを保持する。 - payloadに影響する更新と同一transactionでdirty stateを記録する。 - source単位でdebounce/coalescingし、batch UPSERTでcacheを更新する。 - NDJSONは `COPY (SELECT payload::text ... ORDER BY ...) TO STDOUT` でストリーミング出力し、アプリ側で全件をmaterializeしない。 - dump開始時のfreshness、snapshot境界、画像tarとの整合性、失敗時の再開を明確にする。 - 新しい汎用jobs依存は増やさず、#612 Phase 5 のdomain-specific run/item方針に合わせる。 ## 実装項目 - [ ] dump cache / dirty state / schema versionのschemaとmigrationを追加する - [ ] media・tag・character・IP・author等、dump payloadへ影響する更新箇所でdirty markerをtransactionalに記録する - [ ] source単位のdebounce/coalescingとbatch UPSERTで差分cacheを更新する処理を実装する - [ ] PostgreSQLのstreaming `COPY` からNDJSONを生成し、画像tarを含むdump処理をbounded-memory化する - [ ] 現行Lance dumpとの件数・内容・順序のparity、snapshot整合性、失敗再開、通常時負荷、dump速度を実測する - [ ] rollback可能期間を経て、source dump/export用LanceDBの同期job・schema・設定・依存を削除する ## 受け入れ条件 - LanceDBの常時同期なしでsource dump/exportを生成できる。 - NDJSON/tarの内容と整合性が既存実装と同等である。 - dump処理がbounded memoryで動作し、通常利用時の負荷とdump速度の基準を満たす。 - rollback手順と移行後のLance依存ゼロを確認できる。
親Issue
背景
source dump/export用LanceDBの常時同期が、通常利用時にも高いCPU・メモリ負荷を生む。CCIP用LanceDBとは独立に、dump/exportのread modelをPostgreSQLへ移す。
方針
(source_id, media_id)単位の差分dump cacheをPostgreSQLに持つ。jsonbとし、schema versionと生成元revisionを保持する。COPY (SELECT payload::text ... ORDER BY ...) TO STDOUTでストリーミング出力し、アプリ側で全件をmaterializeしない。実装項目
COPYからNDJSONを生成し、画像tarを含むdump処理をbounded-memory化する受け入れ条件