ما هو "المزامنة المادية" لقاعدة بيانات خزانة كيوتو؟

StackOverflow https://stackoverflow.com/questions/4299896

سؤال

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

ماذا يعني ذلك عندما يشير إلى "مادي" ، أو صعب ، التزامن؟

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

المحلول

لست متأكدًا تمامًا من معادلات Java ، ولكن:

  • يعني التزامن المنطقي أن أي تغييرات DB يتم كتابة من ذاكرة التخزين المؤقت DBMS إلى نظام الملفات. في C ، ستفعل ذلك باستخدام FPRINTF/FWRITE/WRITE/ETC.

  • يعني التزامن المادي ما سبق ، مع تشغيل الإضافات لطلب نظام التشغيل لدفع التغييرات المذكورة إلى التخزين الدائم (محرك الأقراص الثابتة ، SSD ، أيا كان) بدلاً من الاحتفاظ بها في ذاكرة التخزين المؤقت لنظام الملفات. هذا يضمن عدم فقد هذه التغييرات في حالة حدوث أي شيء غير مرغوب فيه. على نظام Linux/Posix الذي من شأنه أن يتضمن استدعاء مكالمات نظام FSYNC () أو FDATASYNC ().

تعديل:

من الواضح أن ما يعادل fsync () في java هو filedescriptor.sync ():

http://download.oracle.com/javase/1.4.2/docs/api/java/io/filedescriptor.html#

النقطة المهمة هي أنه لتحقيق دلالات الحمض الحقيقية لـ DB ، يجب مزامنة جميع المعاملات مع وسيط التخزين الدائم. وإلا فإن التطبيق الخاص بك يجب أن يكون قادرًا على التعامل مع المعاملات التي فشلت بصمت - فإن DBMs ستدفع المعاملات إلى نظام الملفات والعودة بنجاح ، ولكن يمكن أن تضيع التغييرات إذا فقدت النظام الطاقة.

تكمن مشكلة التزامن البدني في أنه يمكن أن يكون له تأثير كبير على الأداء. يمكن للمحركات الصلبة التعامل مع عدد محدود من المعاملات في الثانية (SSDs هي كثير بشكل أسرع في هذا) ، وهذا هو السبب في أن أول ما يجب القيام به لتحسين أداء DB هو حزمة إدراج في المعاملات الكبيرة.

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