coder13 / coder13/LetsCube

Backfill MongoDB data into PostgreSQL and verify ongoing parity

オープン
#175 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
area: data enhancement priority: P1
主要言語
JavaScript
スター
30
フォーク
9
PR マージ指標
30日以内にマージされた PR はありません

説明

Part of #199.

## Goal

Turn PostgreSQL dual writes into a trustworthy migration target by copying historical MongoDB data and continuously checking parity.

For the competition-room foundation, this backfill must target the new Room/RaceSession model rather than preserving the current assumption that a room is itself one racing session.

## RaceSession mapping

- Convert each existing MongoDB room into one PostgreSQL Room plus one RaceSession for its current event.
- Attach every embedded attempt to that RaceSession while preserving deterministic attempt and solve IDs.
- Populate session participant state according to the approved domain contract.
- Preserve room identity, access code, ownership, privacy, timestamps, and deletion/expiration state.
- Make the mapping explicit and repeatable; do not attempt to infer event sessions whose attempts were already deleted by the legacy event-change behavior.
- Verify concurrent live writes are neither lost nor duplicated during the backfill.

## Acceptance criteria

- [ ] Implement an idempotent, resumable backfill for users/preferences, rooms, race sessions, participant state, attempts, durable solve results, and sanitized metrics.
- [ ] Support dry-run, bounded batches, progress checkpoints, and safe retries.
- [ ] Do not copy OAuth access tokens or prohibited metric fields.
- [ ] Produce reconciliation output for record counts, missing identifiers, duplicate identifiers, room/session relationships, penalty fields, and representative aggregates.
- [ ] Verify every attempt belongs to the expected RaceSession and every RaceSession belongs to the expected Room.
- [ ] Verify writes arriving during the backfill are not lost or duplicated.
- [ ] Document operational invocation, expected runtime/load, alerts, failure recovery, and how to rerun only failed ranges.
- [ ] Add focused tests for deterministic IDs, cursor boundaries, retry behavior, session mapping, and reconciliation failures.

## Dependencies

- Stable production dual writes from PR #171, deployed through #176.
- The Room/RaceSession domain contract and expansion schema from #200 and #203.
- The schema and migration history must remain compatible with rollback requirements.

## Unlocks

- #202
- #174
- #160

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

Start with the Room/RaceSession domain contract and expansion schema from #200 and #203, then review the dual-write and deployment context in PR #171 and #176 plus the schema migration history. Trace the required mappings and rollback constraints before defining the resumable backfill. Done means reconciliation, retry and concurrency checks, focused tests, and operational documentation cover the listed acceptance criteria.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
mongodb, postgresql
領域
databases
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。