Ka ɗauki manhajar a matsayin : kowace na'ura wata ce ta cikin gida. Ana rubuta ayyukan karatu zuwa tare da mai ƙari-kawai (outbox); idan aka sake haɗawa, na'urar tana kuma tana tun sync ɗin ƙarshe. Ba a warware conflicts sai dai da .
Ka ɗauki manhajar a matsayin : kowace na'ura wata ce ta cikin gida. Ana rubuta ayyukan karatu zuwa tare da mai ƙari-kawai (outbox); idan aka sake haɗawa, na'urar tana kuma tana tun sync ɗin ƙarshe. Ba a warware conflicts sai dai da .
Tunanin fahimta: ka yi tunaninsa kamar git — kowace na'ura tana yin "commit" a cikin gida yayin da take offline, kuma sync merge ne, ba rubutu a kai ba.
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)
Agogon waya ba abin dogaro ba ne kuma na'urori biyu za su iya gyara record iri ɗaya offline, don haka "last write wins" (LWW) yana asarar data a shiru. Warware da semantics:
// op yana da id -> aiwatar da idempotently (retries ba sa ƙidaya sau biyu). clientTs BA a amincewa da shi ba.
function mergeProgress(server, op) {
return {
// progress kawai yana ƙaruwa -> max: tsohon op da ya makara ba zai taɓa jan shi baya ba
progress: Math.max(server.progress ?? 0, op.progress),
// studiedMs additive counter ne -> ƙara delta, kada ka rubuta a kai
studiedMs: (server.studiedMs ?? 0) + op.studiedMs,
completedAt: server.completedAt ?? (op.progress >= 1 ? op.clientTs : null),
};
}
A nan, LWW mara-tsari zai bar na'urar tsohuwa da ke yin sync a makare da progress: 0.3 ta rubuta a kan 0.9 na server → asarar ci gaba. Ɗaukar max da haɗa studiedMs yana sa sync order-independent — mai aminci lokacin da na'urori miliyoyi ke yin sync da agogo marasa daidaito.
Mai hirar yana bincike ko ka san ba za a amince da agogon client ba (don haka ba timestamp LWW kaɗai ba), ko kana sa sync ya zama idempotent (op ids), da kuma ko kana merge bisa ma'anar data. Amsa mai rauni: "yi amfani da timestamps, last write wins." Amsa mai ƙarfi: replica + op log + idempotency + per-field merge + server a matsayin source of truth — tare da ambaton gazawar asarar data ta LWW a fili.
LWW yana da arha amma yana asara; semantic merge yana buƙatar tunani a kowane field amma ba ya rasa komai. Ka nemi cikakken CRDT/OT kawai lokacin da kake buƙatar gyara na haɗin gwiwa na gaskiya (notes, documents) — yana da tsada, don haka kada ka yi amfani da shi ga komai.
Ɗakin karatu na tambayoyin hira na IT tare da amsoshi cikakke — daga Junior zuwa Senior.
Ba da Gudummawa