متى تحدث التعارضات
يحدث تعارض البيانات عندما يتم تعديل نفس السجل من مصادر مختلفة قبل مزامنة التغييرات. السيناريوهات النموذجية:
جهازان دون اتصال
يعمل عضوان في الفريق دون اتصال على أجهزة مختلفة ويعدّلان نفس السجل. مثلاً:
- المشغّل عند المدخل يسجل حضور مشارك ويضيف تعليق «VIP»
- المدير على جهاز آخر يسجل نفس الحضور ويضيف تعليق «مقعد إضافي»
- عند استعادة الاتصال يُرسل كلا التغييرين إلى الخادم
دون اتصال + متصل
عضو فريق يعمل دون اتصال وآخر متصل:
- المدير على الكمبيوتر (متصل) يغيّر حالة التسجيل
- المشغّل في الموقع (دون اتصال) يغيّر نفس الحالة
- عند المزامنة يتعارض التغيير دون اتصال مع التغيير المطبق أثناء الاتصال
متى تكون التعارضات غير محتملة
عملياً تحدث التعارضات نادراً لأن:
- أعضاء الفريق المختلفون عادةً يعملون مع مشاركين مختلفين
- تسجيل الحضور عملية أحادية الاتجاه (تسجيل الوصول)، والتعارض ممكن فقط عند المسح المزدوج
- العمليات المالية محمية بـ idempotency-key
استراتيجية: الكاتب الأخير يفوز (Free، Pro)
في باقات Free وPro تُستخدم استراتيجية تلقائية last-writer-wins (الأخير يفوز):
كيف تعمل
- عند المزامنة يقارن الخادم طوابع الوقت
clientTsللتغييرات المتعارضة. - يُحفظ التغيير ذو الطابع الزمني الأحدث تلقائياً.
- يُكتب فوق التغيير ذو الطابع الزمني الأقدم.
- يتم تسجيل كلا التغييرين في سجل التدقيق (حتى المُكتوب فوقه).
مثال
| الوقت | الإجراء | النتيجة |
|---|---|---|
| 10:05 | المشغّل أ (دون اتصال): حضور + تعليق «VIP» | محفوظ محلياً |
| 10:07 | المشغّل ب (دون اتصال): حضور + تعليق «عادي» | محفوظ محلياً |
| 10:15 | المشغّل أ يتصل بالإنترنت | التغيير مُرسل |
| 10:16 | المشغّل ب يتصل بالإنترنت | تعارض. يفوز ب (10:07 > 10:05). التعليق = «عادي» |
المزايا والقيود
المزايا:
- تلقائي بالكامل -- لا يتطلب تدخل المستخدم
- لا يقطع سير العمل
- مناسب لمعظم السيناريوهات (تسجيل الحضور، الحالات البسيطة)
القيود:
- يُفقد التغيير الأقدم بدون إشعار
- لا توجد إمكانية لدمج تغييرين
- قد يؤدي إلى فقدان معلومات للبيانات الحساسة
استراتيجية: القفل المتفائل + واجهة الدمج (Business، Enterprise)
في باقات Business وEnterprise تتوفر استراتيجية تفاعلية لحل التعارضات مع واجهة مرئية.
كيف تعمل
- عند المزامنة يكتشف الخادم التعارض (تم تعديل السجل بعد آخر حالة معروفة للعميل).
- بدلاً من الكتابة التلقائية يُرجع الخادم كلا النسختين.
- تُعرض للمستخدم واجهة الدمج merge UI -- واجهة مقارنة النسخ.
- يختار المستخدم أي نسخة يحفظ أو يدمج التغييرات يدوياً.
واجهة الدمج (Merge UI)
تعرض واجهة حل التعارضات:
-
العمود الأيسر: نسختك (التغيير المحلي)
- مُنشئ التغيير
- وقت التغيير
- الحقول المعدّلة وقيمها
-
العمود الأيمن: نسخة الخادم (تغيير شخص آخر)
- مُنشئ التغيير
- وقت التغيير
- الحقول المعدّلة وقيمها
-
الإجراءات:
- «الاحتفاظ بنسختي» -- تغييرك يكتب فوق نسخة الخادم
- «قبول نسخة الخادم» -- تُحفظ نسخة الخادم ويُلغى تغييرك
- «دمج» -- تختار القيمة يدوياً لكل حقل
مثال
| الحقل | نسختك | نسخة الخادم |
|---|---|---|
| تسجيل الحضور | نعم | نعم |
| التعليق | VIP، مقعد A-12 | عادي |
| الحالة | مؤكد | مؤكد |
يمكنك قبول تسجيل الحضور من كلا النسختين (متطابقتان)، وأخذ تعليقك وحالة الخادم.
القفل المتفائل (Optimistic locking)
يُستخدم تحت الغطاء القفل المتفائل:
- كل سجل له رقم إصدار (version counter)
- عند إرسال التغيير يحدد العميل الإصدار الذي يستند إليه
- إذا تغير الإصدار على الخادم (شخص آخر حدّث السجل)، يُرجع الخادم تعارضاً
- يعرض العميل واجهة الدمج
إشعارات التعارضات
عند اكتشاف تعارض:
Free / Pro: إشعار toast «تم حل تعارض البيانات تلقائياً» (إعلامي، بدون إجراءات).
Business / Enterprise: إشعار toast «تم اكتشاف تعارض. يتطلب قرارك» مع زر للانتقال إلى واجهة الدمج. يحظر التعارض مزامنة التغييرات المتبقية حتى يتم حله.
التوصيات
- وزّع مناطق المسؤولية. عيّن لأعضاء الفريق مجموعات مختلفة من المشاركين أو مناطق تسجيل حضور مختلفة لتقليل التعارضات.
- زامن أكثر. الفترات القصيرة للعمل دون اتصال تقلل احتمالية التعارضات.
- استخدم واجهة الدمج للبيانات الحساسة. إذا كان فريقك يعمل بنشاط مع نفس السجلات، فكّر في الترقية إلى Business للوصول إلى حل التعارضات التفاعلي.