التعامل مع التعديلات غير المتزامنة من الوثائق على شبكة الإنترنت

StackOverflow https://stackoverflow.com/questions/985341

  •  13-09-2019
  •  | 
  •  

سؤال

أنا أكتب تطبيقا ويب يحتوي على واجهة مستخدم لتحرير البيانات. الفكرة هي شيء مشابه ل Wiki حيث توجد تعديلات على قطع النص. ما هي أفضل طريقة للتعامل مع التعديلات غير المتزامنة من عدة مستخدمين؟ الوضع الذي أفكر به هو:

هناك مستند هو الإصدار 0. يقوم المستخدم A بتحريره عندما يكون الإصدار 0. بعد بضع دقائق ولكن قبل أن يحفظ المستخدم تغييراته، يفتح المستخدم B نفس المستند ويبدأ التحرير. كيف يجب أن يعالج الخادم تعديلين مختلفين إلى الإصدار 0 من المستند؟ أيضا ما تسمى هذه المشكلة وأين يمكنني الحصول على مزيد من المعلومات حول مشاكل مماثلة؟

هل كانت مفيدة؟

المحلول

ويكيبيديا يعالج هذه المشكلة بالطريقة التالية:

افترض أن الشخص A وشخصي B كلاهما تحرير المستند نفسه. افترض أيضا الشخص تقديم تعديلاتهم قليلا قبل شخص ب.

  • أولا برنامج الوسائط Wiki يدير تقليدية خوارزمية مختلفة على حد سواء التعديلات.
  • بعد ذلك، يتم استخدام نتائج خوارزمية Diffing لدمج النص.
  • إذا وجدت خوارزمية تفاطلخ أن هناك تعارض دمج (أي شخص تحرير نفس النصوص)، فسيطلب من الشخص ب حل النزاعات منذ أن قدمت تحريرها أخيرا.

يعالج ويكيبيديا دمج النزاعات مثل النزاعات في مستودع التعليمات البرمجية.

إذا كنت ترغب في السماح للأشخاص المتعددين بتحرير مستند في وقت واحد وفي الوقت الفعلي (مثل جوجل موجة أو etherpad.)، ثم أوصي بالنظر إلى التحولات التشغيلية (ويعرف أيضا باسم OT). على الرغم من أن خوارزمية OT ليست أصعبا أو أبسط من خوارزمية تفاضية تقليدية، إلا أن هناك معلومات أقل عنها وعلى عدد أقل من التطبيقات الجاهزة.

نصائح أخرى

أحد النمط النموذجي هو إرسال كل مستخدم جزء من النص وأيضا رقم إصدار يشير إلى الإصدار الذي تلقوهه. القاعدة هي أن المضيف لن يقبل فقط المراجعة الأولى إلى إصدار التصديق حاليا.

بهذه الطريقة يمكن لشخص واحد فقط مراجعة كل إصدار؛ سيتم إخبار أي شخص آخر أن إصدارهم قد عفا عليه الزمن ويمكنك أن تفعل ما تريده به في تلك المرحلة - عادة ما يرسل لهم الإصدار الحالي لإعادة المحاولة.

يعمل هذا فقط إذا كان من غير المرجح أن يكون لدى العديد من الأشخاص الذين يعملون على نفس الإصدار. إذا كان ذلك من المحتمل أن تحتاج إلى البحث في كيفية معالجة التخريب عن المثيل تنقيحات متعددة إلى التعليمات البرمجية المصدرية.

هناك أيضا مخططات لعدة أشخاص يعملون في وقت واحد على نفس النص وتغذي تحديثات بعضهم البعض - انظر Google Wave للحصول على مثال واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top