Kezeld az alkalmazást módon: minden eszköz egy helyi . A tanulási műveletek egy és egy csak-hozzáfűző (outbox) íródnak; újracsatlakozáskor az eszköz és az utolsó szinkron óta. A konfliktusokat egyetlen globális szabály oldja fel, hanem .
Kezeld az alkalmazást módon: minden eszköz egy helyi . A tanulási műveletek egy és egy csak-hozzáfűző (outbox) íródnak; újracsatlakozáskor az eszköz és az utolsó szinkron óta. A konfliktusokat egyetlen globális szabály oldja fel, hanem .
Gondolati modell: képzeld el git-ként — minden eszköz helyileg "commitol" offline, a szinkron pedig merge, nem felülírás.
Device (offline) Server = source of truth
┌──────────────────┐ on reconnect ┌───────────────────────────┐
│ Local DB (SQLite)│ push ops (delta) │ Sync API /sync │
│ + Op log (outbox)│ ─────────────────▶ │ • idempotent by op.id │
│ cursor = lastSeen│ ◀───────────────── │ • merge by semantics │
└──────────────────┘ pull changes>cursor└───────────────────────────┘
Progress DB (Postgres)
A telefonórák megbízhatatlanok, és két eszköz offline szerkesztheti ugyanazt a rekordot, ezért a "last write wins" (LWW) csendben adatot veszít. Szemantika szerint oldd fel:
// az opnak van id-je -> alkalmazd idempotensen (az újrapróbálkozások nem számolnak duplán). a clientTs NEM megbízható.
function mergeProgress(server, op) {
return {
// a progress csak nő -> max: egy késői régi op sosem húzza vissza
progress: Math.max(server.progress ?? 0, op.progress),
// a studiedMs additív számláló -> add hozzá a deltát, ne írd felül
studiedMs: (server.studiedMs ?? 0) + op.studiedMs,
completedAt: server.completedAt ?? (op.progress >= 1 ? op.clientTs : null),
};
}
Itt a sima LWW hagyná, hogy egy elavult eszköz, amely későn szinkronizál progress: 0.3-mal, felülírja a szerver 0.9-ét → elveszett haladás. A max vétele és a studiedMs összegzése sorrend-függetlenné teszi a szinkront — biztonságos, amikor milliónyi eszköz szinkronizál elcsúszott órákkal.
A kérdező azt firtatja, tudod-e, hogy a kliensórák nem megbízhatók (tehát nem tiszta timestamp LWW), idempotenssé teszed-e a szinkront (op id-k), és az adat jelentése szerint mergelsz-e. Gyenge válasz: "használj timestampeket, last write wins." Erős válasz: replika + op log + idempotencia + mezőnkénti merge + szerver mint igazság forrása — és az LWW adatvesztés-hibájának kifejezett megnevezése.
Az LWW olcsó, de veszteséges; a szemantikus merge mezőnkénti gondolkodást igényel, de semmit sem veszít. Teljes CRDT/OT-hez csak akkor nyúlj, ha valóban kollaboratív szerkesztés kell (jegyzetek, dokumentumok) — költséges, ezért ne használd mindenre.
IT interjúkérdések gyűjteménye részletes válaszokkal — Juniortól Seniorig.
Adományozás