各种ZODB blobstorage布局有什么区别?

5 投票
2 回答
1243 浏览
提问于 2025-04-16 11:02

ZODB的blobstorage目录里有一个.layout文件,里面包含了'lawn'和'bushy'这两个字符串。

那么,不同的blob存储目录格式有什么区别呢?

2 个回答

2

一般来说,你不需要担心布局问题;lawn 这个布局只是为了兼容旧版本。

如果你确实有一个 lawn 布局的 blob 存储(如果有的话,日志里会有警告),并且想要迁移到 bushy 布局,可以使用 migrateblobs 脚本;下面是创建这个脚本的 buildout 部分:

[migrateblobs]
recipe = zc.recipe.egg
eggs = ZODB3
entry-points = migrateblobs=ZODB.scripts.migrateblobs:main

先关闭所有实例和 ZEO 服务器,备份你的 blob 存储,然后在你的 blob 存储目录下运行这个脚本:

$ mv var/blobstorage var/blobstorage-lawn
$ bin/migrateblobs var/blobstorage-lawn/ var/blobstorage

var/blobstorage 里就会包含使用 bushy 布局迁移过来的 blobs。

7

这里有个解释:https://github.com/zopefoundation/ZODB/blob/master/src/ZODB/tests/blob_layout.txt

重点内容:

====================== Blob 目录布局

Blob 目录的内部结构是由所谓的 布局 决定的。目前的默认布局叫做 bushy

最初的 blob 实现使用了一种我们现在称为 lawn 的布局,这种布局为了兼容旧版本仍然可以使用。

布局实现了两个方法:一个是计算 OID 的相对路径,另一个是把相对路径转换回 OID。

我们的术语大致与 DirectoryStorage 中使用的相同。

它还详细解释了各种格式。

撰写回答