بنية البيانات الموزعة

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

إشعار

تفترض هذه المقالة أنك على دراية بإدخال بنيات البيانات الموزعة على fluidframework.com.

تتصرف بنية البيانات الموزعة مثل بنية بيانات محلية. يمكن للتعليمات البرمجية إضافة بيانات إليها، وإزالة البيانات، وتحديثها، وما إلى ذلك. ومع ذلك، فإن DDS ليس كائنا محليا. يمكن أيضا تغيير DDS بواسطة عملاء آخرين يعرضون نفس الحاوية الأصل ل DDS. نظرا لأنه يمكن للمستخدمين تغيير نفس DDS في الوقت نفسه، تحتاج إلى مراعاة DDS الذي يجب استخدامه لنمذجة بياناتك.

إشعار

معنى "في وقت واحد"

يقال أن عميلين أو أكثر يجريان تغييرا في وقت واحد إذا قاموا بإجراء تغيير قبل أن يتلقوا تغييرات الآخرين من الخادم.

يمكن أن يؤدي اختيار بنية البيانات الصحيحة للسيناريو إلى تحسين الأداء وبنية التعليمات البرمجية للتطبيق الخاص بك.

تختلف DDSes عن بعضها البعض بثلاث خصائص:

  • بنية البيانات الأساسية: على سبيل المثال، زوج قيم المفاتيح أو تسلسل أو قائمة انتظار.
  • استقلالية العميل: يمكن DDS المتفائل أي عميل من تغيير قيمة بشكل أحادي ويتم ترحيل القيمة الجديدة إلى جميع العملاء الآخرين. ولكن توافق DDS يسمح فقط بالتغيير إذا تم قبوله من قبل عملاء آخرين من خلال عملية توافق في الآراء.
  • نهج الدمج: النهج الذي يحدد كيفية حل التغييرات المتعارضة من العملاء.

أدناه قمنا بتعداد بنيات البيانات ووصفها عندما تكون مفيدة للغاية.

بيانات قيمة المفتاح

يتم استخدام DDSes هذه لتخزين بيانات قيمة المفتاح. إنهم متفائلون ويستخدمون نهج دمج last-writer-wins. على الرغم من أن قيمة الزوج يمكن أن تكون عنصرا معقدا، لا يمكن تحرير قيمة أي زوج معين مباشرة؛ يجب استبدال القيمة بأكملها بقيمة جديدة تحتوي على عمليات التحرير المطلوبة، بالكامل.

  • SharedMap: بنية بيانات أساسية لقيمة المفتاح.

سيناريوهات قيمة المفتاح

تعد بنيات البيانات ذات القيمة الرئيسية الخيار الأكثر شيوعا للعديد من السيناريوهات.

  • بيانات تفضيلات المستخدم.
  • الحالة الحالية للاستطلاع.
  • تكوين طريقة العرض.

المشكلات الشائعة وأفضل الممارسات ل DDSes ذات القيمة الرئيسية

  • سيكون لتخزين عداد في SharedMap سلوك غير متوقع. استخدم SharedCounter بدلا من ذلك.
  • قد يؤدي تخزين الصفائف أو القوائم أو السجلات في إدخال قيمة المفتاح إلى سلوك غير متوقع لأنه لا يمكن للمستخدمين تعديل أجزاء من إدخال واحد بشكل تعاوني. حاول تخزين بيانات الصفيف أو القائمة في SharedSequence أو SharedInk.
  • قد يتسبب تخزين الكثير من البيانات في إدخال قيمة مفتاح واحد في حدوث مشكلات في الأداء أو الدمج. سيقوم كل تحديث بتحديث القيمة بأكملها بدلا من دمج تحديثين. حاول تقسيم البيانات عبر مفاتيح متعددة.

التسلسلات

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

  • SharedNumberSequence: تسلسل من الأرقام.
  • SharedObjectSequence: سلسلة من الكائنات العادية.

سيناريوهات التسلسل

  • القوائم
  • الجداول الزمنية

المشكلات الشائعة وأفضل الممارسات ل DDSes التسلسلية

  • تخزين البيانات غير القابلة للتغيير فقط كعنصر في تسلسل. الطريقة الوحيدة لتغيير قيمة العنصر هي أولا إزالته من التسلسل ثم إدراج قيمة جديدة في الموضع حيث كانت القيمة القديمة. ولكن نظرا لأنه يمكن للعملاء الآخرين إدراجها وإزالتها، فلا توجد طريقة موثوقة للحصول على القيمة الجديدة في الموضع المطلوب.

السلاسل

يتم استخدام SharedString DDS للبيانات النصية غير المنظمة التي يمكن تحريرها بشكل تعاوني. إنه متفائل.

  • SharedString -- بنية بيانات لمعالجة النص التعاوني.

سيناريوهات السلسلة

  • محررات النصوص

(راجع أيضًا )

لمعرفة المزيد حول DDSes وكيفية استخدامها، راجع الأقسام التالية من fluidframework.com: