A PersistentDict (теперь называется PersistentMapping ) - это класс, который наследуется от UserDict.IterableUserDict и persistent.Persistent .
UserDict. .
Таким образом, PersistentDict (или PersistentMapping) - это в основном словарь, который может храниться как объект в ZODB.
Обычные словари нельзя хранить как отдельные объекты в ZODB. Они должны быть атрибутами некоторого класса, который наследуется от persistent.Persistent .
PersistentDict хранит свои ключи и значения внутри фактического словаря (атрибут data ).
PersistentDict не может быть добавлен через ZMI, и я думаю, что он предназначен в основном для особого случая, когда вы хотите сохранить словарь непосредственно в zodb.
С папкой Полагаю, вы имеете в виду папку в zope.container.folder .
Папка хранит свои дочерние элементы в объекте OOBTree, который является контейнером, который может содержать большое количество объектов.
Если вы хотите, чтобы контейнер содержал экземпляры других типов контента, вам лучше использовать папку.
Папка имеет интерфейсы, которых нет у PersistentDict, и эти интерфейсы могут потребоваться для работы определенных адаптеров или других компонентов. Например, событие ContainerModified будет срабатывать только тогда, когда была изменена папка, а не PersistentDict. Подобные ошибки могут быть разными, если вы используете PersistentDict в качестве папки общего назначения.
Когда дело касается производительности, словарь обычно будет работать быстрее, пока пространство клавиш не станет очень большим. Затем весы наклоняются к OOBTree.