عندما PersistentDict عندما المجلد ؟
-
14-11-2019 - |
سؤال
متى يجب استخدام PersistentDict و متى يجب استخدام مجلد ؟ ما هو الفرق بينهما من حيث التحديثات الداخلية بنية الأداء ، وما إلى ذلك ؟
المحلول
A PersistentMapping
هو مجرد تنفيذ الثعبان dict
نوع (عبر المكتبة القياسية UserDict
الفئة الأساسية) ضبط استمرار دلالات ZODB;فإنه يحفظ من الحاجة إلى تعيين _p_changed
العلم على أقرب فئة يرث من Persistent
في كل مرة يمكنك تغيير mapping
.
A Folder
هو أكثر ثراء من نوع وتنفيذ الأحداث ، التكامل مع Zope واجهة ويب (ZMI), من خلال شبكة الإنترنت التعسفي خصائص (سمات مع نوع التحقق من الصحة) ، إدارة Zope أذونات التحقق من البند الفرعي معرفات الاستيراد/التصدير ، إلخ.البنود الفرعية المجلدات المخزنة على سمات الكائن نفسه ، مع بعض البيانات المخزنة في ديكت على سبيل المثال.
استخدام Folder
عندما كنت بحاجة إلى أي من هذه الخدمات الإضافية (وفد أذونات id التحقق من الصحة ، الخ) ، استخدام PersistentMapping
خلاف ذلك.أداء الحكمة يبحث أو تخزين العناصر لن تختلف كثيرا ؛ واحد هو مستقيم الثعبان dict
تحت الآخر هو المثيل __dict__
تخزين العناصر.
إذا كنت تبحث عن تجنب الصراع ، يجب أن ننظر إلى بطرس, ، OOBTree
فئة هي في الأساس استمرار الخرائط حيث يتم تخزين القيم في استمرار الدلاء ، وتجنب الاصطدامات في معظم الحالات ، وتوفير حل الصراع من أجل الراحة.
إذا كنت تريد Folder
دلالات مع BTree
تخزين دلالات ، أنظر والمنتجات.BTreeFolder2, و إضافة على أن تطبق Folder
واجهات ولكن المخازن الفرعية الكائنات في OOBTree
بدلا من سمات مباشرة على الحالات.
نصائح أخرى
A persistentectictict * (يسمى الآن الثبات ) هو فئة ترث من userdict.iterablecerdictrictrictrict و م>.
userdict.iterablecerdictrictrict هو فئة بيثون مدمجة تحاكي قاموس التقهيم و ثابتة. الانخفاض هو فئة ZOPE التي تتيح حفظها في حد ذاتها ZODB.
لذلك البرنامج الثابت (أو الدستورية) هو أساسا قاموس يمكن تخزينه ككائن في ZODB.
لا يمكن تخزين القواميس العادية ككائنات منفصلة في ZODB. يجب أن يكونوا سمات من بعض الفئة التي ترث من مستمرة. عند . تقوم
بتخزين مفاتيحها وقيمها داخل القاموس الفعلي ( البيانات السمة).
لا يمكن إضافة persistentdict من خلال zmi وأعتقد أنه من المقصود في الغالب من أجل الحالة الخاصة التي تريد تخزينها في القاموس مباشرة في ZODB.
مع مجلد أعتقد أنك تعني المجلد في zope.container.folder . يخزن مجلدات الأطفال داخل كائن OOOBTREE، وهو حاوية يمكن أن تعقد كميات كبيرة من الكائنات.
عندما تريد حاوية تحتوي على مثيلات من أنواع المحتوى الأخرى، يجب عليك تفضل الذهاب مع مجلد.
يحتوي مجلد على واجهات لا يمتلكها persistrentdict وقد تكون هذه الواجهات قد تكون هناك حاجة لبعض المحولات أو مكونات أخرى للعمل. على سبيل المثال، فإن الحدث المحرز سيؤدي فقط إلى إطلاقه عند تعديل مجلد، وليس ثابتا. قد يكون هناك كل أنواع gotchas مثل هذه إذا كنت تستخدم persistentectict كمجلد لأغراض عامة.
عندما يتعلق الأمر بالأداء، عادة ما يكون القاموس بشكل أسرع حتى يصبح المفاتيح كبيرا كبيرا. ثم يتم تغطية المقاييس نحو OOOBTREE.