سؤال

لي SQLiteيستخدم التطبيق المستند إلى المعاملات حاليًا - سواء للقدرة على التراجع أو لتحسين الأداء.أفكر في استبدال جميع المعاملات بنقاط الحفظ.والسبب هو أن التطبيق متعدد الخيوط (نعم، sqlite تم تكوينه ليكون آمنًا لمؤشر الترابط)، وفي بعض الحالات قد تبدأ المعاملة بواسطة خيطين في نفس الوقت (على نفس قاعدة البيانات).

  1. هل هناك سبب لعدم القيام بذلك؟
  2. هل هناك أي عيوب يجب أن أكون على دراية بها؟
  3. هل يمكنني فقط استبدال BEGIN, COMMIT, ROLLBACK مع SAVEPOINT xyz, RELEASE SAVEPOINT xyz, ROLLBACK TO SAVEPOINT xyz?
هل كانت مفيدة؟

المحلول

    It there a reason NOT to do it?

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

    Are there any pitfalls I need to be aware of?

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

باختصار، ما لم تكن بحاجة إلى التراجع عن المعاملات جزئيًا، فلن تمنحك نقاط الحفظ الكثير (بخلاف حقيقة تسميتها).

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

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