نوع البيانات المكررة الخالية من التعارض
في الحوسبة الموزعة ، يُعد نوع البيانات المكرر الخالي من التعارض ( CRDT ) بنية بيانات يتم تكرارها عبر أجهزة كمبيوتر متعددة في الشبكة ، مع الميزات التالية: [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ]
- يمكن للتطبيق تحديث أي نسخة بشكل مستقل ومتزامن ودون التنسيق مع النسخ الأخرى.
- تقوم خوارزمية (وهي جزء من نوع البيانات نفسه) بحل أي تناقضات قد تحدث تلقائيًا.
- على الرغم من أن النسخ المتماثلة قد تكون لها حالات مختلفة في أي وقت معين، إلا أنه من المؤكد أنها ستتقارب في النهاية.
تم تعريف مفهوم CRDT رسميًا في عام 2011 من قِبل مارك شابيرو، ونونو بريغويسا، وكارلوس باكيرو، ومارك زافيرسكي. [ 9 ] وكان الدافع وراء تطويره في البداية هو تحرير النصوص التعاوني والحوسبة المتنقلة . كما استُخدمت CRDTs في أنظمة الدردشة عبر الإنترنت ، والمقامرة الإلكترونية ، ومنصة توزيع الصوت SoundCloud . وتحتوي قواعد البيانات الموزعة NoSQL مثل Redis و Riak و Cosmos DB على أنواع بيانات CRDT.
خلفية
قد تؤدي التحديثات المتزامنة لنسخ متعددة من البيانات نفسها، دون تنسيق بين أجهزة الكمبيوتر التي تستضيف هذه النسخ، إلى تناقضات بينها، والتي قد لا يمكن حلها في أغلب الأحيان. لذا، قد يتطلب استعادة اتساق البيانات وسلامتها عند وجود تعارضات بين التحديثات، إلغاء بعض التحديثات أو جميعها كليًا أو جزئيًا.
وبناءً على ذلك، يركز جزء كبير من الحوسبة الموزعة على مشكلة كيفية منع التحديثات المتزامنة للبيانات المنسوخة. لكن ثمة نهج آخر ممكن وهو النسخ المتفائل ، حيث يُسمح لجميع التحديثات المتزامنة بالمرور، مع احتمال حدوث تناقضات، ثم تُدمج النتائج أو تُحل لاحقًا. في هذا النهج، يُعاد تأسيس الاتساق بين النسخ في النهاية عبر دمج النسخ المختلفة. مع أن النسخ المتفائل قد لا ينجح في الحالة العامة، إلا أن هناك فئة مهمة وعملية من هياكل البيانات، وهي CRDTs، حيث ينجح هذا النهج - إذ يُمكن دائمًا دمج أو حل التحديثات المتزامنة على نسخ مختلفة من هيكل البيانات دون تعارضات. وهذا ما يجعل CRDTs مثالية للنسخ المتفائل.
على سبيل المثال، يُعدّ مُؤشّر الحدث المنطقي أحادي الاتجاه مُعرّفًا بسيطًا في CRDT: بت واحد، قيمته إما صواب أو خطأ. صواب تعني وقوع حدث مُعيّن مرة واحدة على الأقل. خطأ تعني عدم وقوع الحدث. بمجرد تعيين المُؤشّر إلى صواب، لا يُمكن إعادته إلى خطأ (لا يُمكن التراجع عن وقوع حدث). طريقة الحل هي "الصواب هو الفيصل": عند دمج نسخة مُتماثلة حيث يكون المُؤشّر صوابًا (أي أن تلك النسخة قد رصدت الحدث)، مع نسخة أخرى حيث يكون المُؤشّر خطأً (أي أن تلك النسخة لم ترصد الحدث)، تكون النتيجة المُحَلّة صوابًا - أي أن الحدث قد رُصد.
أنواع اختبارات التشخيص السريع المعتمدة على الحاسوب
هناك منهجان لـ CRDTs، وكلاهما يوفر اتساقًا نهائيًا قويًا : CRDTs القائمة على الحالة [ 10 ] [ 11 ] و CRDTs القائمة على العمليات. [ 12 ] [ 13 ]
اختبارات التشخيص السريع المعتمدة على مستوى الولايات
تُعرَّف أنواع البيانات المتكررة المتقاربة القائمة على الحالة (CRDTs) (وتُسمى أيضًا أنواع البيانات المتكررة المتقاربة ، أو CvRDTs ) بنوعين: نوع للحالات المحلية ونوع للإجراءات على الحالة، بالإضافة إلى ثلاث دوال: دالة لإنتاج حالة ابتدائية ، ودالة لدمج الحالات، ودالة لتطبيق إجراء لتحديث حالة. ببساطة، تُرسل أنواع البيانات المتكررة المتقاربة القائمة على الحالة حالتها المحلية الكاملة إلى النسخ المتماثلة الأخرى في كل تحديث، حيث تُدمج الحالة الجديدة المُستلمة في الحالة المحلية. ولضمان التقارب النهائي، يجب أن تُحقق الدوال الخصائص التالية: يجب أن تحسب دالة الدمج عملية الربط لأي زوج من حالات النسخ المتماثلة، وأن تُشكل شبه شبكة مع الحالة الابتدائية كعنصر محايد. على وجه الخصوص، هذا يعني أن دالة الدمج يجب أن تكون تبادلية ، وتجميعية ، ومتطابقة . يكمن المنطق وراء التبادلية والتجميعية والتطابق في أن هذه الخصائص تُستخدم لجعل نوع البيانات المتكرر المتقارب ثابتًا تحت إعادة ترتيب الحزم وتكرارها. علاوة على ذلك، يجب أن تكون دالة التحديث رتيبة فيما يتعلق بالترتيب الجزئي المحدد بواسطة الشبكة شبه المذكورة.
تُعد CRDTs ذات الحالة دلتا [ 11 ] [ 14 ] (أو ببساطة CRDTs دلتا) CRDTs محسّنة قائمة على الحالة حيث يتم نشر التغييرات التي تم تطبيقها مؤخرًا على الحالة بدلاً من الحالة بأكملها.
اختبارات التشخيص السريع القائمة على العمليات
تُعرَّف أنواع البيانات المُكرَّرة التبادلية القائمة على العمليات (CRDTs) (وتُسمى أيضًا أنواع البيانات المُكرَّرة التبادلية ، أو CmRDTs ) بدون دالة دمج. فبدلًا من نقل الحالات، تُرسَل إجراءات التحديث مباشرةً إلى النسخ المتماثلة وتُطبَّق عليها. على سبيل المثال، قد يُرسِل نوع بيانات CRDT قائم على العمليات لعدد صحيح واحد العمليتين "+10" أو " -20 ". يجب أن يظل تطبيق العمليات تبادليًا وتجميعيًا . ومع ذلك، بدلًا من اشتراط أن يكون تطبيق العمليات مُكرَّرًا ، يُتوقع افتراضات أقوى بشأن بنية الاتصالات التحتية - يجب تسليم جميع العمليات إلى النسخ المتماثلة الأخرى دون تكرار.
تُعد CRDTs القائمة على العمليات البحتة [ 13 ] نوعًا مختلفًا من CRDTs القائمة على العمليات والتي تقلل من حجم البيانات الوصفية.
مقارنة
البديلان متكافئان نظريًا، إذ يمكن لكل منهما محاكاة الآخر. [ 1 ] مع ذلك، توجد اختلافات عملية. غالبًا ما تكون نماذج CRDT القائمة على الحالة أبسط في التصميم والتنفيذ؛ إذ لا تتطلب من بنية الاتصال سوى نوع من بروتوكول التناقل . أما عيبها فيكمن في ضرورة نقل حالة كل نموذج CRDT بالكامل في النهاية إلى كل نسخة أخرى، وهو ما قد يكون مكلفًا. في المقابل، تنقل نماذج CRDT القائمة على العمليات عمليات التحديث فقط، والتي عادةً ما تكون صغيرة. مع ذلك، تتطلب نماذج CRDT القائمة على العمليات ضمانات من برمجيات الاتصال الوسيطة ؛ ألا تُفقد العمليات أو تُكرر عند نقلها إلى النسخ الأخرى، وأن تُسلّم بالترتيب السببي . [ 1 ]
بينما تفرض بروتوكولات CRDT القائمة على العمليات متطلباتٍ أكثر صرامة على بروتوكول نقل العمليات بين النسخ المتماثلة، فإنها تستهلك نطاقًا تردديًا أقل من بروتوكولات CRDT القائمة على الحالة عندما يكون عدد المعاملات صغيرًا مقارنةً بحجم الحالة الداخلية. مع ذلك، ولأن وظيفة دمج CRDT القائمة على الحالة ترابطية، فإن دمجها مع حالة نسخة متماثلة ما يُنتج جميع التحديثات السابقة لتلك النسخة. تعمل بروتوكولات التناقل بكفاءة عالية لنشر حالة CRDT القائمة على الحالة إلى نسخ متماثلة أخرى، مع تقليل استخدام الشبكة ومعالجة تغييرات البنية.
بعض الحدود الدنيا [ 15 ] لتعقيد التخزين لـ CRDTs القائمة على الحالة معروفة.
اختبارات التشخيص السريع المعروفة
عداد جي (عداد مخصص للزراعة فقط)
الحمولة عدد صحيح[ن] P [0,0,...,0] تحديث الزيادة () let g = myId () P[g] := P[g] + 1 قيمة الاستعلام () : عدد صحيح v ليكن v = Σi P[i] مقارنة (س، ص): قيمة منطقية ب let b = (∀i ∈ [0, n - 1] : XP[i] ≤ YP[i]) دمج (س، ص): الحمولة ع let ∀i ∈ [0, n - 1] : ZP[i] = max (XP[i], YP[i])
تُنفّذ هذه CRDT القائمة على الحالة عدادًا لمجموعة من n عقدة. تُخصّص لكل عقدة في المجموعة مُعرّف من 0 إلى n - 1، ويتم استرجاعه باستدعاء دالة معينة myId(). بالتالي، تُخصّص لكل عقدة خانة خاصة بها في المصفوفة P ، والتي تُزيدها محليًا. تُنشر التحديثات في الخلفية، وتُدمج بأخذ قيمة max()كل عنصر في P. تتضمن الدالة دالة مقارنة لتوضيح الترتيب الجزئي للحالات. دالة الدمج تبادلية، وتجميعية، ومُكررة. تُزيد دالة التحديث الحالة الداخلية بشكل رتيب وفقًا لدالة المقارنة. بالتالي، تُعد هذه CRDT قائمة على الحالة مُعرّفة بشكل صحيح، وستوفر اتساقًا نهائيًا قويًا. تقوم CRDT المكافئة القائمة على العمليات ببث عمليات الزيادة عند استلامها. [ 2 ]
عداد PN (عداد إيجابي-سلبي)
الحمولة عدد صحيح[n] P، عدد صحيح[n] N [0,0,...,0] الابتدائية، [0,0,...,0] تحديث الزيادة () let g = myId () P[g] := P[g] + 1 تحديث النقصان () let g = myId () N[g] := N[g] + 1قيمة الاستعلام () : عدد صحيح v ليكن v = Σi P[i] - Σi N[i] مقارنة (س، ص): قيمة منطقية ب دع ب = (∀i ∈ [0, n - 1] : XP[i] ≥ YP[i] ∧ ∀i ∈ [0, n - 1] : XN[i] ≥ YN[i]) دمج (س، ص): الحمولة ع let ∀i ∈ [0, n - 1] : ZP[i] = max (XP[i], YP[i]) دع ∀i ∈ [0, n - 1] : ZN[i] = الحد الأقصى (XN[i], YN[i])
تتمثل إحدى الاستراتيجيات الشائعة في تطوير CRDT في دمج عدة أنواع من CRDT لإنشاء نوع بيانات CRDT أكثر تعقيدًا. في هذه الحالة، يتم دمج عدادين من نوع G لإنشاء نوع بيانات يدعم عمليات الزيادة والنقصان. يقوم العداد G "P" بحساب الزيادات، بينما يقوم العداد G "N" بحساب النقصان. قيمة العداد PN هي قيمة العداد P مطروحًا منها قيمة العداد N. تتم عملية الدمج بجعل العداد P المدمج هو ناتج دمج العدادين G "P"، وبالمثل بالنسبة للعدادات N. تجدر الإشارة إلى أن الحالة الداخلية لـ CRDT يجب أن تزداد بشكل مطرد، على الرغم من أن حالتها الخارجية كما تظهر من خلال الاستعلام يمكن أن تعود إلى قيم سابقة. [ 2 ]
مجموعة جي (مجموعة مخصصة للزراعة فقط)
مجموعة الحمولة أ القطر الأولي تحديث إضافة (العنصر هـ) A := A ∪ {e}استعلام البحث (العنصر هـ): قيمة منطقية ب ليكن b = (e ∈ A) قارن (S، T): قيمة منطقية b ليكن b = (SA ⊆ TA) دمج (S، T): الحمولة U ليكن UA = SA ∪ TAمجموعة G (مجموعة النمو فقط) هي مجموعة لا تسمح إلا بالإضافة. لا يمكن إزالة أي عنصر بمجرد إضافته. دمج مجموعتين من مجموعات G هو اتحادهما. [ 2 ]
مجموعة ثنائية الطور (2P-Set)
مجموعة الحمولة A، مجموعة الحمولة R ∅ ابتدائي، ∅استعلام البحث (العنصر هـ): قيمة منطقية ب ليكن b = (e ∈ A ∧ e ∉ R) تحديث إضافة (العنصر هـ) A := A ∪ {e} تحديث إزالة (العنصر هـ)البحث المسبق (هـ) R := R ∪ {e} قارن (S، T): قيمة منطقية b دع ب = (SA ⊆ TA ∨ SR ⊆ TR) دمج (S، T): الحمولة U ليكن UA = SA ∪ TA ليكن UR = SR ∪ TRيتم دمج مجموعتين من مجموعات النمو فقط (G-Sets) لإنشاء مجموعة 2P. بإضافة مجموعة إزالة (تُسمى مجموعة "الحذف")، يمكن إضافة العناصر وإزالتها. بمجرد إزالة عنصر، لا يمكن إضافته مرة أخرى؛ أي، بمجرد وجود عنصر e في مجموعة الحذف، لن تُرجع الاستعلامات القيمة True لهذا العنصر مرة أخرى. تستخدم مجموعة 2P دلالات "الإزالة لها الأولوية"، لذا فهي لها الأسبقية على مجموعة النمو فقط . [ 2 ]remove(e)add(e)
LWW-Element-Set (Last-Write-Wins-Element-Set)
تُشبه مجموعة عناصر LWW مجموعة 2P في كونها تتكون من "مجموعة إضافة" و"مجموعة إزالة"، مع طابع زمني لكل عنصر. تُضاف العناصر إلى مجموعة عناصر LWW بإدخالها في مجموعة الإضافة، مع طابع زمني. وتُزال العناصر من مجموعة عناصر LWW بإضافتها إلى مجموعة الإزالة، مع طابع زمني أيضًا. يُعتبر العنصر عضوًا في مجموعة عناصر LWW إذا كان موجودًا في مجموعة الإضافة، ولم يكن موجودًا في مجموعة الإزالة، أو كان موجودًا في مجموعة الإزالة ولكن بطابع زمني أقدم من أحدث طابع زمني في مجموعة الإضافة. يتضمن دمج نسختين من مجموعة عناصر LWW أخذ اتحاد مجموعتي الإضافة واتحاد مجموعتي الإزالة. عندما تتساوى الطوابع الزمنية، يظهر "انحياز" مجموعة عناصر LWW، حيث يمكن أن تكون منحازة نحو الإضافات أو الإزالة. تتمثل ميزة مجموعة عناصر LWW على مجموعة 2P في أنها، على عكس مجموعة 2P، تسمح بإعادة إدخال عنصر بعد إزالته. [ 2 ]
مجموعة OR (مجموعة الملاحظة والإزالة)
تُشبه مجموعة OR مجموعة عناصر LWW، ولكنها تستخدم وسومًا فريدة بدلًا من الطوابع الزمنية. لكل عنصر في المجموعة، يتم الاحتفاظ بقائمة وسوم الإضافة وقائمة وسوم الحذف. يُضاف عنصر إلى مجموعة OR بإنشاء وسم فريد جديد وإضافته إلى قائمة وسوم الإضافة الخاصة به. تُحذف العناصر من مجموعة OR بإضافة جميع الوسوم الموجودة في قائمة وسوم الإضافة الخاصة بالعنصر إلى قائمة وسوم الحذف (قائمة علامات الحذف). لدمج مجموعتين من مجموعات OR، لكل عنصر، تكون قائمة وسوم الإضافة الخاصة به هي اتحاد قائمتي وسوم الإضافة، وكذلك الحال بالنسبة لقائمتي وسوم الحذف. يكون العنصر عضوًا في المجموعة إذا وفقط إذا كانت قائمة وسوم الإضافة مطروحًا منها قائمة وسوم الحذف غير فارغة. [ 2 ] من الممكن إجراء تحسين يُلغي الحاجة إلى الاحتفاظ بمجموعة علامات الحذف؛ مما يتجنب النمو غير المحدود المحتمل لهذه المجموعة. يتم تحقيق التحسين من خلال الاحتفاظ بمتجه من الطوابع الزمنية لكل نسخة. [ 16 ]
اختبارات التشخيص السريع للتسلسل
يمكن استخدام التسلسل أو القائمة أو المجموعة المرتبة CRDT لبناء محرر تعاوني في الوقت الحقيقي ، كبديل للتحويل التشغيلي (OT).
من بين أدوات CRDT المعروفة لتسلسل البيانات: Treedoc [ 5 ] ، وRGA [ 17 ] ، وWoot [ 4 ] ، وLogoot [ 18 ] ، وLSEQ [ 19 ] . أما CRATE [ 20 ] فهو محرر لامركزي يعمل في الوقت الفعلي، مبني على LSEQSplit (امتداد لـ LSEQ)، ويمكن تشغيله على شبكة من المتصفحات باستخدام WebRTC . وقد طُرح LogootSplit [ 21 ] كامتداد لـ Logoot بهدف تقليل البيانات الوصفية لتسلسلات CRDT. وMUTE [ 22 ] [ 23 ] هو محرر تعاوني فوري يعمل عبر الإنترنت، ويعتمد على خوارزمية LogootSplit.
من المعروف أن خوارزميات CRDT الصناعية، بما فيها مفتوحة المصدر، تتفوق على التطبيقات الأكاديمية بفضل التحسينات ومنهجية الاختبار الأكثر واقعية. [ 24 ] ومن أبرز الأمثلة الشائعة Yjs CRDT، الرائدة في استخدام قائمة بسيطة بدلاً من شجرة (على غرار دمج كليمان التلقائي ). [ 25 ]
الاستخدام الصناعي
- Fluid Framework عبارة عن منصة تعاونية مفتوحة المصدر تم إنشاؤها بواسطة Microsoft والتي توفر كلاً من تطبيقات مرجعية للخادم ومجموعات تطوير البرامج (SDKs) من جانب العميل لإنشاء تطبيقات ويب حديثة في الوقت الفعلي باستخدام CRDTs.
- Nimbus Note هو تطبيق لتدوين الملاحظات التعاوني يستخدم Yjs CRDT للتحرير التعاوني. [ 26 ]
- Redis عبارة عن قاعدة بيانات موزعة، عالية التوفر، وقابلة للتوسع، تعمل في الذاكرة، وتتميز بخاصية "قاعدة البيانات المُمكّنة بتقنية CRDT". [ 27 ]
- أصدرت SoundCloud برنامج Roshi مفتوح المصدر، وهو عبارة عن مجموعة عناصر LWW CRDT لتدفق SoundCloud تم تنفيذه فوق Redis. [ 28 ]
- Riak هو مخزن بيانات NoSQL موزع يعتمد على نظام المفتاح والقيمة باستخدام CRDTs. [ 29 ] تستخدم لعبة League of Legends تطبيق Riak CRDT لنظام الدردشة داخل اللعبة، والذي يتعامل مع 7.5 مليون مستخدم متزامن و11000 رسالة في الثانية. [ 30 ]
- يخزن موقع Bet365 مئات الميغابايت من البيانات في تطبيق Riak لمجموعة OR. [ 31 ]
- تستخدم شركة TomTom تقنية CRDTs لمزامنة بيانات الملاحة بين أجهزة المستخدم. [ 32 ]
- يستخدم Phoenix ، وهو إطار عمل ويب مكتوب بلغة Elixir ، CRDTs لدعم مشاركة المعلومات متعددة العقد في الوقت الحقيقي في الإصدار 1.2. [ 33 ]
- تُطبّق فيسبوك تقنية CRDTs في قاعدة بيانات Apollo منخفضة زمن الوصول "الاتساق على نطاق واسع". [ 34 ]
- يستخدم فيسبوك CRDTs في نظام FlightTracker الخاص به لإدارة الرسم البياني لفيسبوك داخليًا. [ 35 ]
- يستخدم برنامج Teletype for Atom تقنية CRDTs لتمكين المطورين من مشاركة مساحة العمل الخاصة بهم مع أعضاء الفريق والتعاون في كتابة التعليمات البرمجية في الوقت الفعلي. [ 36 ]
- تُطبّق شركة Apple تقنية CRDTs في تطبيق Notes لمزامنة التعديلات غير المتصلة بالإنترنت بين أجهزة متعددة. [ 37 ]
- قدمت شركة نوفيل نظام CRDT قائم على الحالة مع نسخ الدليل "المتسق بشكل فضفاض" ( خدمات دليل NetWare )، والذي تم تضمينه في NetWare 4.0 في عام 1995. [ 38 ] وقدم المنتج اللاحق، eDirectory، تحسينات على عملية النسخ. [ 39 ]
- تستخدم ميزة التحرير متعدد اللاعبين في الوقت الفعلي في Figma نظام نسخ متماثل يعتمد على الخادم، حيث يفوز آخر كاتب لكل خاصية (على غرار سجل LWW في أدبيات CRDT)؛ أما بالنسبة للتسلسلات المرتبة (مثل ترتيب الطبقات)، فتستخدم فهرسة جزئية مع كسر التعادل من جانب الخادم لعمليات الإدراج المتزامنة (بدلاً من التحويلات التشغيلية ). [ 40 ] [ 41 ]
- AutoMerge هي مكتبة مفتوحة المصدر تقدم العديد من CRDTs في JavaScript و Rust، وتنسيق ضغط، وبروتوكول مزامنة.
انظر أيضاً
مراجع
- 1 2 3 شابيرو، مارك؛ بريغويسا، نونو؛ باكيرو، كارلوس؛ زافيرسكي، ماريك (2011). "أنواع البيانات المكررة الخالية من التعارض". استقرار وسلامة وأمن الأنظمة الموزعة (ملف PDF) . سلسلة محاضرات في علوم الحاسوب. المجلد 6976. غرونوبل، فرنسا: سبرينغر برلين هايدلبرغ. الصفحات 386-400 . doi : 10.1007/978-3-642-24550-3_29 . ISBN 978-3-642-24549-7. S2CID 51995307 .
- 1 2 3 4 5 6 7 شابيرو، مارك؛ بريجويكا، نونو؛ باكيرو، كارلوس؛ زويرسكي، ماريك (13 يناير 2011). “دراسة شاملة لأنواع البيانات المتقاربة والتبادلية”. ص-7506 .
- ^ شابيرو، مارك. بريجويكا، نونو (2007). “تصميم نوع بيانات تبادلية منسوخة”. أرخايف : 0710.1784 [ cs.DC ].
- 1 2 أوستر، جيرالد؛ أورسو، باسكال؛ مولي، باسكال؛ إيمين، عبد الصمد (2006). وقائع مؤتمر الذكرى السنوية العشرين لعام 2006 حول العمل التعاوني المدعوم بالحاسوب - CSCW '06 . ص 259. CiteSeerX 10.1.1.554.3168 . doi : 10.1145/1180875.1180916 . ISBN 978-1595932495. S2CID 14596943 .
- 1 2 ليتيا، ميهاي؛ بريغويسا، نونو؛ شابيرو، مارك (2009). "CRDTs: الاتساق بدون التحكم في التزامن". مستودع أبحاث الحوسبة . arXiv : 0907.0929 .
- ↑ بريغويسا، نونو؛ ماركيز، جوان مانويل؛ شابيرو، مارك؛ ليتيا، ميهاي (يونيو 2009)، "نوع بيانات مُكرَّر تبادلي للتحرير التعاوني" (ملف PDF) ، وقائع المؤتمر الدولي التاسع والعشرين لمعهد مهندسي الكهرباء والإلكترونيات حول أنظمة الحوسبة الموزعة ، مونتريال، كيبيك، كندا: جمعية الحاسبات التابعة لمعهد مهندسي الكهرباء والإلكترونيات، الصفحات 395-403 ، doi : 10.1109/ICDCS.2009.20 ، ISBN 978-0-7695-3659-0، S2CID 8956372
- ^ باكيرو، كارلوس. مورا، فرانسيسكو (1997)، مواصفات أنواع البيانات المجردة المتقاربة للحوسبة المتنقلة المستقلة ، جامعة دو مينهو
- ↑ شنايدر، فريد (ديسمبر 1990). "تنفيذ خدمات مقاومة للأعطال باستخدام منهج آلة الحالة: دليل تعليمي" . مجلة ACM Computing Surveys . 22 (4): 299-319 . doi : 10.1145/98163.98167 . S2CID 678818 .
- ↑ "أنواع البيانات المنسوخة الخالية من التعارض" . inria.fr. 19 يوليو 2011.
- ↑ باكيرو، كارلوس؛ مورا، فرانسيسكو (1 أكتوبر 1999). "استخدام الخصائص الهيكلية للتشغيل الذاتي". مجلة SIGOPS لأنظمة التشغيل ، 33 (4): 90-96 . doi : 10.1145/334598.334614 . hdl : 1822/34984 . S2CID 13882850 .
- 1 2 ألميدا، باولو سيرجيو؛ شوكر، علي؛ باكيرو، كارلوس (13 مايو 2015). "خوارزمية CRDTS فعالة قائمة على الحالة باستخدام طفرة دلتا". في: بوعجاني، أحمد؛ فوكونييه، هيوز (محرران). الأنظمة الشبكية . سلسلة محاضرات في علوم الحاسوب. المجلد 9466. دار نشر سبرينغر الدولية. الصفحات 62-76 . arXiv : 1410.2803 . doi : 10.1007/978-3-319-26850-7_5 . ISBN 9783319268491. S2CID 7852769 .
- ↑ ليتيا، ميهاي؛ بريغويسا، نونو؛ شابيرو، مارك (1 أبريل 2010). "الاتساق بدون التحكم في التزامن في الأنظمة الديناميكية الكبيرة" (ملف PDF) . مجلة SIGOPS لأنظمة التشغيل ، 44 (2): 29-34 . doi : 10.1145/1773912.1773921 . S2CID 6255174 .
- 1 2 باكيرو، كارلوس؛ ألميدا، باولو سيرجيو؛ شوكر، علي (2014-06-03). "جعل CRDTS قائمًا على العمليات". في ماغوتيس، كوستاس؛ بيتزوش، بيتر (محرران). التطبيقات الموزعة والأنظمة القابلة للتشغيل البيني . سلسلة محاضرات في علوم الحاسوب. المجلد 8460. سبرينغر برلين هايدلبرغ. الصفحات 126-140 . CiteSeerX 10.1.1.492.8742 . doi : 10.1007/978-3-662-43352-2_11 . ISBN 9783662433515.
- ^ ألميدا، باولو سيرجيو. شكر، علي؛ باكيرو ، كارلوس (2016/03/04). “أنواع بيانات ولاية دلتا المنسوخة”. مجلة الحوسبة المتوازية والموزعة . 111 : 162– 173. أرخايف : 1603.01529 . دوى : 10.1016/j.jpdc.2017.08.003 . S2CID 7990602 .
- ↑ بوركهارت، سيباستيان؛ غوتسمان، أليكسي؛ يانغ، هونغسوك؛ زافيرسكي، ماريك (23 يناير 2014). "أنواع البيانات المكررة: المواصفات، والتحقق، والأمثلية". وقائع الندوة الحادية والأربعين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة (ملف PDF) . الصفحات 271-284 . doi : 10.1145/2535838.2535848 . ISBN 9781450325448. S2CID 15023909 .
- ^ بينيوسا، أنيت. زاورسكي، ماريك؛ بريجويكا، نونو؛ شابيرو، مارك؛ باكيرو، كارلوس؛ باليجاس، فالتر؛ دوارتي، سيرجيو (2012). “مجموعة مكررة محسنة خالية من الصراع”. أرخايف : 1210.3368 [ cs.DC ].
- ↑ روه، هيون-غول؛ جيون، ميونغجاي؛ كيم، جين-سو؛ لي، جونوون (2011). "أنواع البيانات المجردة المتكررة: لبنات بناء للتطبيقات التعاونية". مجلة الحوسبة المتوازية والموزعة . 71 (2): 354-368 . doi : 10.1016/j.jpdc.2010.12.006 .
- ↑ فايس، ستيفان؛ أورسو، باسكال؛ مولي، باسكال (2010). "Logoot-Undo: نظام تحرير تعاوني موزع على شبكات الند للند". معاملات IEEE في الأنظمة المتوازية والموزعة . 21 (8): 1162-1174 . Bibcode : 2010ITPDS..21.1162W . doi : 10.1109/TPDS.2009.173 . ISSN 1045-9219 . S2CID 14172605 .
- ↑ نيديلك، بريس؛ مولي، باسكال؛ مصطفى، عاشور؛ ديسمونتيلز، إيمانويل (2013). "LSEQ: بنية تكيفية للتسلسلات في التحرير التعاوني الموزع". وقائع ندوة ACM لعام 2013 حول هندسة المستندات (PDF) . الصفحات 37-46 . doi : 10.1145/2494266.2494278 . ISBN 9781450317894. S2CID 9215663 .
- ↑ نيديلك، بريس؛ مولي، باسكال؛ مصطفى، عاشور (2016). "CRATE: كتابة القصص مع متصفحاتنا". وقائع المؤتمر الدولي الخامس والعشرين المصاحب للويب العالمي . ص 231. doi : 10.1145/2872518.2890539 . S2CID 5096789. مؤرشف من الأصل في 1 يناير 2020. تم الاسترجاع في 1 يناير 2020 .
- ↑ أندريه، لوك؛ مارتن، ستيفان؛ أوستر، جيرالد؛ إغنات، كلوديا-لافينيا (2013). "دعم دقة التغييرات القابلة للتكيف من أجل التحرير التعاوني واسع النطاق". وقائع المؤتمر الدولي للحوسبة التعاونية: الشبكات والتطبيقات ومشاركة العمل - CollaborateCom 2013. الصفحات 50-59 . doi : 10.4108/icst.collaboratecom.2013.254123 . ISBN 978-1-936968-92-3.
- ↑ "كتم الصوت" . فريق الساحل. 24 مارس 2016.
- ^ نيكولاس ماتيو. إلفينجر، فيكتوريان؛ أوستر، جيرالد. إجنات، كلوديا لافينيا؛ تشاروي ، فرانسوا (2017). “MUTE: محرر تعاوني في الوقت الحقيقي قائم على الويب من نظير إلى نظير”. وقائع لوحات ECSCW والعروض التوضيحية والملصقات لعام 2017 . دوى : 10.18420/ecscw2017_p5 . S2CID 43984228 .
- ↑ جنتل، سيف. "CRDTs أسرع: مغامرة في التحسين" . josephg.com . تم الاطلاع عليه في 1 أغسطس 2021 .
- ↑ "yjs/yjs: أنواع البيانات المشتركة لبناء برامج تعاونية" . GitHub .
- ↑ "حول اختبارات التشخيص السريع المعتمدة على التباين" . تم الاطلاع عليه بتاريخ 18-06-2020 .
- ↑ "التعمق في CRDTs" . Redis . 17 مارس 2022. تم الاسترجاع في 22 مايو 2024 .
- ↑ بورغون، بيتر (9 مايو 2014). "روشي: نظام CRDT للأحداث ذات الطابع الزمني" . ساوند كلاود.
- ↑ "تقديم Riak 2.0: أنواع البيانات، والاتساق القوي، والبحث في النص الكامل، وغير ذلك الكثير" . شركة باشو تكنولوجيز، 29 أكتوبر 2013.
- ↑ هوف، تود (13 أكتوبر 2014). "كيف وسّعت لعبة ليج أوف ليجيندز نطاق الدردشة لتشمل 70 مليون لاعب - الأمر يتطلب الكثير من التوابع" . قابلية التوسع العالية .
- ^ ماكلين، دان. "bet365: لماذا اختارت bet365 رياك" . باشو.
- ↑ إيفانوف، ديمتري. "التفكيك العملي لاختبارات التشخيص السريع" .
- ↑ ماكورد، كريس (25 مارس 2016). "ما الذي يجعل فينيكس بريزنس مميزًا" .
- ↑ ماك، ساندر. "فيسبوك يعلن عن أبولو في QCon NY 2014" .
- ↑ "FlightTracker: Consistency across Read-Optimized Online Stores at Facebook" . research.facebook.com . تم الاطلاع عليه بتاريخ 8 ديسمبر 2022 .
- ↑ "برمج معًا في الوقت الفعلي باستخدام Teletype لـ Atom" . Atom.io. 15 نوفمبر 2017.
- ↑ "رؤوس Objective-C لنظام التشغيل IOS كما تم اشتقاقها من فحص وقت التشغيل: NST/IOS-Runtime-Headers" . GitHub . 2019-07-25.
- ↑ "فهم خدمات دليل NetWare" . support.novell.com . تم الاطلاع عليه بتاريخ 2024-11-02 .
- ↑ "مزامنة الدليل الإلكتروني والعمليات الخلفية" . support.novell.com . تم الاطلاع عليه بتاريخ 2024-11-02 .
- ↑ "كيف تعمل تقنية اللعب الجماعي في Figma" . مدونة Figma . تم الاطلاع بتاريخ 2026-01-02 .
- ↑ "تحرير التسلسلات المرتبة في الوقت الفعلي" . مدونة فيجما . تم الاطلاع عليه بتاريخ 2026-01-02 .
روابط خارجية
- مجموعة من الموارد والأوراق البحثية حول اختبارات التشخيص السريع بالرنين المغناطيسي
- "الاتساق النهائي القوي وأنواع البيانات المكررة الخالية من التعارض" (محاضرة حول CRDTs) بقلم مارك شابيرو
- قراءات في أنواع البيانات المتكررة الخالية من التعارض بقلم كريستوفر ميكليجون
- نظرية CAP وقواعد CRDT: نظرية CAP بعد 12 عامًا. كيف تغيرت القواعد؟ بقلم إريك بروير
- هياكل البيانات الموزعة
- الخوارزميات الموزعة
- أنظمة حاسوبية مقاومة للأعطال
