我什么时候应该使用持久字典,什么时候应该使用文件夹?它们在更新、内部结构、性能等方面有何区别?
A PersistentMapping
只是 python 的一个实现dict
类型(通过标准库UserDict
基类)针对 ZODB 的持久性语义进行了调整;它省去了设置_p_changed
继承自的最近的类上的标志Persistent
每次你改变mapping
.
A Folder
是一种更丰富的类型,实现事件、与 Zope Web 界面 (ZMI) 集成、通过 Web 任意属性(具有类型验证的属性)、Zope 权限管理、子项 ID 验证、导入/导出等. 子项目文件夹作为属性存储在对象本身上,一些元数据存储在实例上的私有字典中。
Use a Folder
当您需要任何这些额外服务(权限委托、身份验证等)时,请使用PersistentMapping
否则。查找或存储项目的性能不会有太大差异;一种是直蟒蛇dict
下面,另一个是实例__dict__
存放物品。
如果您正在寻求避免冲突,您应该考虑BTrees http://www.zodb.org/documentation/guide/modules.html#btrees-package, the OOBTree
类基本上是一个持久映射,其中值存储在持久存储桶中,在大多数情况下避免冲突,并为其余情况提供冲突解决方案。
如果你想Folder
语义与BTree
存储语义,看看产品.BTreeFolder2 https://pypi.python.org/pypi/Products.BTreeFolder2,以及实现的附加组件Folder
接口,但将子对象存储在OOBTree
而不是直接作为实例上的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)