هل ذاكرة المعاملات البرمجية هي نفس معاملات قاعدة البيانات؟

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

سؤال

لقد قرأت كثيرًا عن ذاكرة المعاملات البرمجية ، خاصة فيما يتعلق بـ Haskell ، لكنني أحاول تحديد مدى اختلافها عن معاملات قاعدة البيانات؟ هل هناك بعض المزايا التي لا أفهمها مع STM؟

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

المحلول

يتم استعارة فكرة "المعاملة" في ذاكرة المعاملات البرمجية بشكل صريح من قواعد البيانات. الفرق هو المكان الذي يتم فيه تنفيذ المعاملات وكيفية استخدامها.

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

معاملات قاعدة البيانات هي مفهوم مستوى التطبيق: لا يسري تسلسل عمليات البيانات حتى يتم ارتكاب المعاملة. نظرًا لأن هذه قاعدة بيانات ، فإن الثبات أمر أساسي: معنى "التأثير" داخل قاعدة البيانات هو أن البيانات يتم حفظها في متجر مستمر.

يمكنك استخدام معاملات قاعدة البيانات وقواعد البيانات لتنفيذ خوارزمية على غرار STM ، لكنك ستفقد السهولة والراحة (وربما في معظم الحالات الأداء) للتنفيذ على مستوى اللغة.

نصائح أخرى

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

يستخدم STM في الغالب للتزامن ، في حين أن معاملات قاعدة البيانات تدور حول تناسق البيانات.

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