Row journal (strategy: rows)
Best for: mutable state, transactional tables, configuration, anything with INSERT/UPDATE/DELETE.
How it works
- Triggers on enrolled table write to
__omega_journal. - Agent assigns monotonic
commit_seq(not SQLite AUTOINCREMENT alone). - Flush loop publishes
sync/rows/batchwith operations:
- Cloud dedupes per row:
(device_id, source_table, journal_epoch, source_pk_hash, commit_seq).
When to choose rows
- Table has a primary key and changes over time.
- You want relational/state materialization through
mirror-rows. - You need update/delete semantics or cloud-authoritative
state_writeflows.
Example tables
device_state— keyed settingsorder_events— append-only event log with PKsensor_timeseries— if you need telemetry hypertables, usestrategy: telemetry
Telemetry batch (strategy: telemetry)
Best for: high-volume time-ordered readings with a timestamp column.
How it works (spec)
- Cursor on max
event_tsincluded in last accepted batch. - Publish
sync/telemetry/batchevery 5s or 512 KiB. - Rows include
ts, optionalrow_id, andfieldsmap. - Cloud dedupes batch on
(device_id, batch_id); enforces monotonicbatch_seq.
Current Omega status
Telemetry batches are emitted onsync/telemetry/batch and materialize into project- or fleet-scoped edge_ts_* hypertables after schema approval.
Ignore (strategy: ignore)
Skip replication for scratch, cache, or local-only tables:
Comparison
Journal epoch
If Omega truncates/rebuilds__omega_journal, it generates a new journal_epoch (UUIDv7). Required so commit_seq=1 after reinit does not dedupe against pre-reinit rows.
Pre-existing rows
Withsnapshot_on_first_run: true, Omega seeds existing SQLite rows into its local journal once before switching to normal incremental replication.
To backfill historical data:
- Run application migrations that touch rows after Omega start, or
- Use
snapshot_on_first_run: truefor the built-in one-time local bootstrap; use the secondary/object-upload flow only for larger future spill/bootstrap scenarios.
Schema columns on first batch
First batch for a table may includeschema_columns inline (full fingerprint structure) to aid server classification. Subsequent batches carry schema_hash only.
→ Schema governance