这是开发人员的常见情况.您希望为需要存储数据的网站的每种内容类型添加功能.它是一种元数据,而不是配置数据.
我看到两个解决方案:
我真的不知道为什么,但是从Plone2.5开始使用zope.annotation很好,现在它似乎不是存储额外数据的首选方式.例如,plone.uuid使用setattr存储唯一ID.
两者之一,取决于数据变化的频率和变化的大小.这都是关于ZODB如何存储这些信息的.
使用setattr直接在对象上存储数据意味着数据存储在该对象的持久记录中.如果这是一个很大的对象,那就意味着这个写作会发生大的交易.
在zope.annotations注释中存储数据意味着您为每个注释条目获取单独的持久性记录,因此对数据的任何更改都将导致较小的事务.但是,如果您想经常访问此数据,则需要在所有其他持久性记录之上加载该额外的持久性记录.它将在您的ZODB缓存中占用一个插槽,您的ZEO服务器或RelStorage服务器将需要为其提供服务等.
plone.uuid使用setattr,因为它通常只为给定对象生成一次,通常是在创建它时.它也是一个经常访问且非常小的数据.因此,通过将其直接放在对象本身上,它将在您加载该对象时立即加载,不需要额外访问ZODB,并且它只会在其生命周期中更改一次.
注意:上面假设注释与AttributeAnnotations适配器一起存储,这是最常用的方法,也是Plone内容的默认方法.
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |