在Plone中创建自定义ZODB?

在Plone中创建自定义ZODB?,plone,zodb,Plone,Zodb,我需要存储一些信息,并能够读写这些信息。我可以创建一个定制的小型ZODB()并让Plone读/写它吗?将其放置在/var/filestorage/myzodb.fs中是否会导致现有Plone及其使用的数据库出现任何问题?正如我前面所说,您可以始终使用注释来存储对象上与架构无关的信息: >>> from persistent.list import PersistentList >>> from persistent.dict import Persistent

我需要存储一些信息,并能够读写这些信息。我可以创建一个定制的小型ZODB()并让Plone读/写它吗?将其放置在/var/filestorage/myzodb.fs中是否会导致现有Plone及其使用的数据库出现任何问题?

正如我前面所说,您可以始终使用注释来存储对象上与架构无关的信息:

>>> 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读/写冲突错误
要放大它,您应该使用(或)。我假设您正在使用部署Plone堆栈。因此,在buildout.cfg中:

[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...>