perf(sync): the fork's signed commit with fast merged deletes and batched inserts
The offline sync package's shared part now comes from the fork's branch halkyon/batch-inserts (949a664, signed), adding two changes to the pin. A merge only deleting rows skips the projection pass when every visible row below them goes with them (a card deleted on one device, in a library of 8,000 cards: 5.4 s for the server to merge, now about 35 ms; 4 s on each other device, now about 0.1 s). And a merge the pass leaves out writes its new rows up to 1,000 to a statement, its proof also taking nested studysets (a first push of that library: 35 to 41 s on the server, now about 5; a device receiving it, 60 s, now 44). A new sync test deletes a card on one device while another rates it: the merged delete declines the shortcut there, and both devices end without the card or its rating. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
971af90ba0
commit
fd69719652
1 changed files with 35 additions and 11 deletions
19
pubspec.yaml
19
pubspec.yaml
|
|
@ -17,23 +17,26 @@ dev_dependencies:
|
|||
leancode_lint: ^27.0.0
|
||||
|
||||
dependency_overrides:
|
||||
# The offline sync package's shared part from our fork: v0.0.10 with five
|
||||
# The offline sync package's shared part from our fork: v0.0.10 with seven
|
||||
# changes. Byte payloads compared as bytes: v0.0.10 compares them byte by byte
|
||||
# through a UUID parse that throws for each byte, so a sync touching a few thousand
|
||||
# cards kept the server busy for minutes, answering nobody, while its client timed
|
||||
# out and sent everything again (2026-10-12). onInboundMerge, called only when
|
||||
# changes from the remote peer were merged: onMergeSuccess fires for a space this
|
||||
# device only pushed to, so every repository read everything again after each
|
||||
# save's sync (2026-10-17). A local delete, and a merge only inserting new rows,
|
||||
# skip the foreign key projection pass when they can't change it: the pass loaded
|
||||
# nearly every synced row, 8 s for one delete and 9.5 s for each rating another
|
||||
# device made, in a library of 8,000 cards (2026-10-17). And projections are
|
||||
# save's sync (2026-10-17). A local delete, and a merge only inserting new rows
|
||||
# or only deleting rows, skip the foreign key projection pass when they can't
|
||||
# change it: the pass loaded nearly every synced row, 8 s for one delete and 9.5 s
|
||||
# for each rating another device made, in a library of 8,000 cards (2026-10-17).
|
||||
# Such a merge writes its new rows up to 1,000 to a statement: a first push of
|
||||
# that library took the server 35 s, now 5 (2026-10-17). And projections are
|
||||
# rebuilt once after the synced tables changed, not on every session and merge
|
||||
# (upstream #150). Pinned to a signed commit of the fork's branch
|
||||
# halkyon/fast-merges (on halkyon/fast-deletes, on halkyon/inbound-merges, on
|
||||
# halkyon/byte-payloads); drop each change once a release of the package has it.
|
||||
# halkyon/batch-inserts (on halkyon/fast-merge-deletes, on halkyon/fast-merges,
|
||||
# on halkyon/fast-deletes, on halkyon/inbound-merges, on halkyon/byte-payloads);
|
||||
# drop each change once a release of the package has it.
|
||||
serverpod_offline_sync:
|
||||
git:
|
||||
url: https://code.halkyon.app/project-halkyon/serverpod-offline-sync.git
|
||||
path: packages/serverpod_offline_sync
|
||||
ref: f062725a16fffa1be8cf9141cdbfefae209598ea
|
||||
ref: 949a6645e08af27bb61c96d7ddc2b6d145fed554
|
||||
|
|
|
|||
Loading…
Reference in a new issue