انتقال SQLite من المعاملات إلى نقاط الحفظ
-
12-12-2019 - |
سؤال
لي SQLite
يستخدم التطبيق المستند إلى المعاملات حاليًا - سواء للقدرة على التراجع أو لتحسين الأداء.أفكر في استبدال جميع المعاملات بنقاط الحفظ.والسبب هو أن التطبيق متعدد الخيوط (نعم، sqlite
تم تكوينه ليكون آمنًا لمؤشر الترابط)، وفي بعض الحالات قد تبدأ المعاملة بواسطة خيطين في نفس الوقت (على نفس قاعدة البيانات).
- هل هناك سبب لعدم القيام بذلك؟
- هل هناك أي عيوب يجب أن أكون على دراية بها؟
- هل يمكنني فقط استبدال
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?
نعم.يمكن للمعاملات أو نقاط الحفظ في تطبيق متعدد مؤشرات الترابط أن تصل إلى طريق مسدود بسهولة إلى حد ما إذا كنت تقوم بتحديث نفس البيانات في خيطين مختلفين أفترض أنهما جوهر الأمر.ولا يوجد فرق بين الاثنين في هذا الصدد.يجب أن تكون على دراية بما تقوم بتحديثه في كل موضوع وأن تقوم بالمزامنة وفقًا لذلك.
باختصار، ما لم تكن بحاجة إلى التراجع عن المعاملات جزئيًا، فلن تمنحك نقاط الحفظ الكثير (بخلاف حقيقة تسميتها).
لا توجد رصاصة فضية هنا.يبدو أنك بحاجة إلى إجراء تحليلات جدية لتطبيقك والبيانات التي قد يتم تحديثها في سلاسل رسائل متعددة وإضافة بعض المزامنة في تطبيقك إذا لزم الأمر.