سؤال

أنا أكتب تطبيقًا بسيطًا يحتوي على 24 عنصرًا في علامة تجزئة لتكون ثابتة عبر عمليات إعدام البرامج ، لذلك يجب أن تكون Berkeley DB (DBM) مناسبة تمامًا لهذه المهمة.

وهو فقط للمتعة.

لكنني أتساءل عما إذا كان استخدامه (مع روبي) ، ثم عندما يضغط المستخدم على Ctrl-C ، يتم إيقاف التنفيذ. في هذه الحالة ، ألا يمكن أن تكون البيانات كلها؟

على سبيل المثال ، إذا كانت القيمة في DB هي 63 ، وأنا أقوم بزيادةها بمقدار 1 (ليكون 64)

63 =  111111 (in binary)  
64 = 1000000 (in binary)

لذلك ، هل يمكن أن يحدث Ctrl-C بشكل صحيح عندما يتم كتابة "الأكثر أهمية" 1 ولكن لم يتم كتابة 0s؟ في هذه الحالة ، ستكون القيمة في DB 127 بدلاً من 63 أو 64. ماذا لو لم تكن روبي ولكن في C ، ويستخدم المستخدم "نافذة إغلاق" أو "قتل" لقتل العملية؟ تعال إلى التفكير في الأمر ، ربما يكتب القرص الصلب هذا البايت (أو 4 بايت) على سطح القرص الثابت في وقت واحد ، لذلك لا ينبغي أن يحدث هذا.

إذا لم يتسبب Ctrl-C في حدوث ذلك ، فقد يؤدي انقطاع التيار الكهربائي أو ركل قابس الطاقة إلى حدوث ذلك؟ على سبيل المثال ، عندما يتم تخزين القيمة مؤقتًا لأول مرة في ذاكرة الوصول العشوائي ، وبينما يتم كتابتها إلى القرص الثابت ، أركل قابس الطاقة ، ويفقد محرك الأقراص الثابتة الطاقة قبل كتابة 0s. أعرف واحدة من كل مليون مرة ، لن يحدث هذا ، لكن هذا مجرد مسألة فضول.

من ناحية أخرى ، إذا كان البرنامج النصي الخاص بي

  1. تقليل قيمة العملة
  2. امنح المستخدم "الهامبرغر" في مخزونه

ثم عندما يضغط المستخدم على Ctrl-C ، ويحدث مباشرة بين (1) و (2) أعلاه ، فإن المستخدم سيكون لديه عملة أقل ، ولا يحصل على الهامبرغر.

لمنع كل هذه الأشياء ، سيكون استخدام طريقة المعاملات باستخدام SleepyCat أو SQLite أو MySQL ، ولن يحدث أي من هذه؟

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

المحلول

لا يمكن مقاطعة أي نظام قاعدة بيانات جيد (فئة تتضمن بيركلي DB) بالطريقة التي تقترحها ، مع تحديث قيمة جزئيًا. عندما تضغط على Control-C ، لا يمكنك مقاطعة وحدة المعالجة المركزية في منتصف المعالجة المركزية. هناك دائمًا مستوى من الحبيبات في الانقطاع ، وتستفيد قواعد البيانات المكتوبة جيدًا من هذه الحقيقة للحماية من قاعدة البيانات في حالة غير متناسقة.

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

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