python – 当PersistentDict时,文件夹?
作者:互联网
我何时应该使用PersistentDict,何时应该使用文件夹?它们在更新,内部结构,性能等方面有何区别?
解决方法:
PersistentMapping只是针对ZODB的Persistence语义调整的python dict类型的实现(通过标准库UserDict基类);每次更改映射时,都不必在最接近的Persistent类上设置_p_changed标志.
文件夹是一种更丰富的类型,实现事件,与Zope Web界面(ZMI)集成,通过Web任意属性(具有类型验证的属性),Zope权限管理,子项ID验证,导入/导出子项目文件夹作为属性存储在对象本身上,一些元数据存储在实例的私有字典中.
当您需要任何这些额外服务(权限委派,ID验证等)时使用文件夹,否则使用PersistentMapping.性能明智的查找或存储项目不会有太大差别;一个是下面的直的python dict,另一个是存储项目的实例__dict__.
如果您正在寻找冲突避免,您应该查看BTrees,OOBTree类基本上是一个持久映射,其中值存储在持久存储区中,在大多数情况下避免冲突,并为其余情况提供冲突解决方案.
如果您想要使用BTree存储语义的文件夹语义,请查看Products.BTreeFolder2和实现Folder接口的附加组件,但是将子对象存储在OOBTree中而不是直接在实例上存储属性.
标签:python,zodb,repoze-bfg 来源: https://codeday.me/bug/20190621/1250889.html