سؤال

متى يجب استخدام 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.

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