在Plone中创建自定义ZODB?
我需要存储一些信息,并能够读写这些信息。我可以创建一个定制的小型ZODB()并让Plone读/写它吗?将其放置在/var/filestorage/myzodb.fs中是否会导致现有Plone及其使用的数据库出现任何问题?正如我前面所说,您可以始终使用注释来存储对象上与架构无关的信息:在Plone中创建自定义ZODB?,plone,zodb,Plone,Zodb,我需要存储一些信息,并能够读写这些信息。我可以创建一个定制的小型ZODB()并让Plone读/写它吗?将其放置在/var/filestorage/myzodb.fs中是否会导致现有Plone及其使用的数据库出现任何问题?正如我前面所说,您可以始终使用注释来存储对象上与架构无关的信息: >>> from persistent.list import PersistentList >>> from persistent.dict import Persistent
>>> from persistent.list import PersistentList
>>> from persistent.dict import PersistentDict
>>> from zope.annotation.interfaces import IAnnotations
>>> anno = IAnnotations(self.context)
>>> anno['employees'] = PersistentList(['Mary', 'Jo', 'Bob'])
>>> anno['codes'] = PersistentDict({'a': 1, 'b': 2})
有关更多详细信息,请参阅
如果仍要将数据存储到不同的ZODB文件,则应注意以下三个主要问题:
- 缩放
- DB连接
- DB读/写冲突错误
[zeoserver]
recipe = plone.recipe.zeoserver
zeo-address = 127.0.0.1:8100
...
zeo-conf-additional =
<filestorage 2>
path ${buildout:directory}/var/myzodb.fs
</filestorage>
[instance]
recipe = plone.recipe.zope2instance
...
zeo-client = True
zeo-address = 127.0.0.1:8100
zope-conf-additional =
<zodb_db myzodb>
<zeoclient>
server 127.0.0.1:8100
storage 2
name myzodbstorage
</zeoclient>
mount-point /myzodb
</zodb_db>
您还可以使用souper获取轻质数据:
>>> from souper.soup import get_soup
>>> soup = get_soup('my_soup_id', context)
>>> soup
<souper.soup.Soup at 0x...>
>>从souper.soup导入获取\u soup
>>>soup=get_soup('my_soup_id',上下文)
>>>汤
它还支持索引。用例是什么?另一个服务是否直接访问数据库?Plone不会关心firestorage目录中未知的fs文件,但我同意Mathias的观点,使用另一个zodb似乎…很奇怪,但不知道您的具体情况。您可以始终使用注释来存储对象上与架构无关的信息;)我在我们的论坛上发布了一个关于你的问题的链接,这个用例是我打电话获取一些值,我需要保存它们,所以下次我不需要再打同样的电话了。偶尔,我需要重复这个调用来获取新的值,但在大多数情况下,它保持不变,Plone只需要读取它们。即使Plone重新启动,我也需要这些值保持不变。没有其他服务使用需要读取这些值。如果数据量较大,您可能希望使用OOBtree而不是PersistentDict。看见
>>> from souper.soup import get_soup
>>> soup = get_soup('my_soup_id', context)
>>> soup
<souper.soup.Soup at 0x...>