الوحدة shelve‎ في بايثون

من موسوعة حسوب
مراجعة 19:36، 20 سبتمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:الوحدة <code>shelve‎</code> في بايثون}}</noinclude> الرف shelf هو كائن مستمر persistent شبيه بالقامو...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)


الرف shelf هو كائن مستمر persistent شبيه بالقاموس، ويختلف عن قواعد بيانات "dbm" في أنّ القيم (وليست المفاتيح) في الرفّ يمكن أن تكون من أيّ نوع من أنواع بيانات بايثون، وبمعنى أدق أي نوع يمكن لوحدة pickle أن تتعامل معه، وهذا يتضمّن معظم نسخ الأصناف، وأنواع البيانات التعاودية، والكائنات التي تتضمن الكثير من الكائنات الفرعية المشتركة. تكون المفاتيح في الرفوف سلاسل نصية عادية.

تحذير نظرًا لاستناد الرفوف على وحدة pickle، فإنّ من الخطر أن تحمّل رفًّا من مصادر غير موثوقة. وكما هو الحال مع وحدة pickle، يمكن لعملية تحميل الرفّ أن تنفّذ أيّ نوع من الشيفرات.

تدعم كائنات Shelf جميع التوابع التي تدعمها القواميس، وهذا يسهّل الانتقال من الشيفرات المبنية على القواميس إلى الشيفرات التي تتطلب تخزين البيانات بصورة مستمرة.

تدعم كائنات Shelf تابعين إضافيين هما:

sync()‎

close()‎

القيود

  • يعتمد اختيار حزمة قاعدة البيانات (مثل dbm.ndbm أو dbm.gnu) على الواجهة البرمجية المتوفّرة؛ ولهذا ليس من الآمن فتح قاعدة البيانات باستخدام dbm مباشرة. تكون قاعدة البيانات كذلك عرضة لمحدّدات dbm في حال استخدامها، وهذا يعني أنّه يجب أن تكون الكائنات (والتمثيل المسلسل لها) ذا حجم صغيرٍ نسبيًا، وفي بعض الحالات النادرة يؤدي التضارب بين المفاتيح إلى رفض قاعدة البيانات لتحديث البيانات.
  • لا تدعم وحدة shelve عمليات الكتابة والقراءة المتزامنة في الكائنات المرفّفة shelved objects. (عمليات القراءة المتعددة والمتزامنة أكثر أمانًا). عندما يفتح برنامج رفًّا للكتابة، يجب أن لا يفتح أي برنامج آخر ذلك الرفّ للقراءة أو للكتابة. يمكن استخدام خاصية قفل الملفات في يونكس لحل هذه المشكلة، ولكنّ هذه التقنية متفاوتة بين إصدارات يونكس وتتطلب معرفة الأداة المستخدمة للتعامل مع قاعدة البيانات.

انظر أيضًا

مصادر

صفحة Python object persistence في توثيق بايثون الرسمي.