سؤال

في تطبيق Google App الخاص بي، عندما يشتري المستخدم عددًا من العقود، يتم تنفيذ هذه الأحداث (مبسطة للتوضيح):

  • تم تقليل user.cash
  • يتم زيادة عدد user.contracts
  • يتم تحديث Contracts.current_price.
  • يتم زيادة market.no_of_transactions بمقدار 1.

في rdms، سيتم وضعها ضمن نفس المعاملة.أتصور أن مخزن بيانات Google لا يسمح لكيانات من أكثر من نموذج واحد بالتواجد في نفس المعاملة.

ما هو النهج الصحيح لهذه المسألة؟كيف يمكنني التأكد من أنه في حالة فشل الكتابة، سيتم التراجع عن كافة عمليات الكتابة السابقة؟

يحرر:من الواضح أنني فاتني مجموعات الكيانات.الآن سأكون ممتنًا للحصول على مزيد من المعلومات حول كيفية استخدامها.هناك نقطة أخرى يجب توضيحها وهي أن Google تقول "لا تستخدم مجموعات الكيانات إلا عند الحاجة إليها للمعاملات.بالنسبة للعلاقات الأخرى بين الكيانات، استخدم خصائص ReferenceProperty والقيم الأساسية، والتي يمكن استخدامها في الاستعلامات".هل يعني ذلك أنه يتعين علي تحديد خاصية مرجعية (بما أنني بحاجة إلى الاستعلام عنها) والعلاقة بين الوالدين والطفل (للمعاملات)؟

تحرير 2:وأخيرًا، كيف يمكنني تحديد الوالدين لكيان ما إذا تم إنشاء الكيان لتأسيس علاقة n-to-n بين الوالدين؟

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

المحلول

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

نصائح أخرى

واسمحوا لي أن أضيف اقتباسا من وثائق مخزن البيانات:

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

يمكنك إنشاء كيان جذر زائف ووضع كل شيء تحته.وبعد ذلك، تقوم بتنفيذ كل شيء في المعاملة.

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

كما وصف نيك جونسونكيفية إجراء عمليات النوع "النقل" عبر مجموعات الكيانات, ، مشابه لما تصفه.إنه ليس للأغراض العامة مثل التابيوكا، لكنه أبسط وأخف وزنًا.

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

ردا على أسئلتك:1) ليس مطلوبًا منك استخدام كل من الخصائص المرجعية وعلاقات الأصل/الفرع (أي مجموعات الكيانات).يعني هذا المبدأ التوجيهي فقط أن مجموعات الكيانات تحد من إنتاجية الكتابة في مخزن البيانات، حيث يتم إجراء عمليات الكتابة بشكل تسلسلي لكل مجموعة كيانات.يجب أن تكون على دراية بذلك إذا كنت تفكر في تنظيم بياناتك في مجموعات كيانات للاستعلامات الأصلية فقط.

2) لا يمكن أن يكون للكيان أكثر من والد واحد.إذا كنت تريد تصميم علاقة متعدد إلى متعدد، فيجب عليك بشكل عام استخدام ListProperty للخصائص المرجعية (أي المفاتيح).يرى هذا المقال و هذا الكلام للتفاصيل.

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