تعامل مع التطبيق على أنه : كل جهاز هو محلية. تُكتب إجراءات الدراسة في بالإضافة إلى للإلحاق فقط (صندوق صادر)؛ وعند إعادة الاتصال و منذ آخر مزامنة له. تُحَل التعارضات بقاعدة عامة واحدة بل بحسب .
النموذج الذهني: فكّر فيها مثل git — كل جهاز "يُثبّت (commits)" محليًا أثناء عدم الاتصال، والمزامنة هي دمج (merge)، وليست كتابة فوقية.
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)
ساعات الهواتف غير موثوقة ويمكن لجهازين تعديل السجل نفسه دون اتصال، لذا فإن "آخر كتابة تفوز" (LWW) تفقد البيانات بصمت. احسم بحسب الدلالات:
// الـ op له معرّف (id) -> طبّقه بشكل idempotent (المحاولات المتكررة لا تُحتسب مرتين). لا يُوثَق بـ clientTs.
function mergeProgress(server, op) {
return {
// التقدّم يزيد فقط -> max: op قديمة متأخرة لا تسحبه للخلف أبدًا
progress: Math.max(server.progress ?? 0, op.progress),
// studiedMs عدّاد تراكمي -> أضف الدلتا، لا تكتب فوقه
studiedMs: (server.studiedMs ?? 0) + op.studiedMs,
completedAt: server.completedAt ?? (op.progress >= 1 ? op.clientTs : null),
};
}
هنا، ستسمح LWW البسيطة لجهاز قديم يتزامن متأخرًا بقيمة progress: 0.3 بأن يكتب فوق قيمة الخادم 0.9 → تقدّم مفقود. أخذ max وجمع studiedMs يجعل المزامنة مستقلة عن الترتيب — آمنة عندما تتزامن ملايين الأجهزة بساعات منحرفة.
يستكشف المُحاوِر ما إذا كنت تعرف أن ساعات العميل لا يمكن الوثوق بها (فلا تعتمد LWW القائمة على الطابع الزمني وحده)، وما إذا كنت تجعل المزامنة idempotent (معرّفات op)، وما إذا كنت تدمج بحسب معنى البيانات. إجابة ضعيفة: "استخدم الطوابع الزمنية، آخر كتابة تفوز." إجابة قوية: replica + op log + idempotency + دمج لكل حقل + الخادم كمصدر للحقيقة — مع التسمية الصريحة لعطل فقدان البيانات في LWW.
LWW رخيصة لكنها تفقد البيانات؛ الدمج الدلالي يحتاج تفكيرًا لكل حقل لكنه لا يفقد شيئًا. لا تلجأ إلى CRDT/OT الكامل إلا عندما تحتاج تحريرًا تعاونيًا حقيقيًا (ملاحظات، مستندات) — فهو مكلف، لذا لا تستخدمه لكل شيء.
مكتبة من أسئلة مقابلات تقنية المعلومات مع إجابات مفصّلة — من المبتدئ إلى المتقدم.
تبرع