Skip to main content

Zope 2 的 OFS 基于 BTree 的实现。

项目描述

概述

BTreeFolder2 是 Zope 产品,其作用类似于 Zope 2 OFS 文件夹,但可以存储更多项目。

当您在 Zope 文件夹中填满太多项目时,Zope 和您的浏览器都会不堪重负。Zope 必须加载和存储一个大型文件夹对象,并且浏览器必须重复呈现大型 HTML 表格。Zope 可以存储大量对象,但在单个标准文件夹中存储大量对象存在问题。

Zope Corporation 曾就此主题进行过广泛的讨论。我们决定扩展标准文件夹以优雅地处理大量对象。不幸的是,Zope 文件夹今天以多种方式使用和扩展,很难以与所有 Zope 产品兼容的方式修改标准文件夹。

于是 BTreeFolder 产品诞生了。它将所有子对象存储在 ZODB BTree 中,该结构旨在允许许多项目而不会将它们全部加载到内存中。它还将文件夹的内容呈现为简单的选择列表而不是表格。大多数浏览器都可以轻松呈现大型选择列表。

但是还有一个问题。BTreeFolders 仍然将所有子对象的 ID 存储在单个数据库记录中。如果您将数以万计的项目放在一个 BTreeFolder 中,您仍然会加载和存储数兆字节的文件夹对象。Zope 可以做到这一点,但不会很快,而且不会使数据库膨胀。

BTreeFolder2 解决了这个问题。它不仅在 BTree 中存储子对象,而且还存储子对象的 ID。它还对 UI 中的项目列表进行批处理,一次仅显示 1000 个项目。因此,如果您仔细编写应用程序,您可以使用 BTreeFolder2 来存储尽可能多的项目,以适应物理存储。

但是,有些产品依赖于原始 BTreeFolder 的内部结构。因此,与其冒险破坏这些产品,不如将产品重命名。您可以同时安装这两个产品。如果您正在开发新的应用程序,您应该使用 BTreeFolder2。

用法

BTreeFolder2 用户界面显示项目列表而不是一系列复选框。要访问一个项目,请在列表中选择它并单击“编辑”按钮。

BTreeFolder2 对象提供了类似于 Python 字典的方法,使它们在 Python 代码中比标准文件夹更易于使用:

has_key(key)
keys()
values()
items()
get(key, default=None)
__len__()

keys()、values() 和 items() 返回序列,但不一定是元组或列表。使用 len(folder) 调用 __len__() 方法。values() 和 items() 返回的对象具有获取包装器。

BTreeFolder2 还提供了一种生成唯一、非重叠 ID 的方法:

generateId(prefix='item', suffix='', rand_ceiling=999999999)

此方法返回的 ID 保证不会与文件夹中的任何其他 ID 冲突。使用返回值作为新对象的 ID。生成的 ID 往往是连续的,以便可能以某种方式相关的对象一起加载。

BTreeFolder2 实现了完整的 Folder 接口,除了 superValues() 方法不返回任何项目。以 Zope 代码库预期的方式实现该方法将破坏使用 BTreeFolder2 获得的性能优势。

变更日志

4.3 (2021-04-26)

  • 添加对 Python 3.9 的支持

  • 现代化 ZMI 模板以匹配 Zope 4 样式 ( #10 )

  • 删除所有对象按钮添加到管理屏幕。( #9 )

4.2 (2019-03-08)

  • 在 setup.py ( Zope#481 )中使用python_requires指定支持的 Python 版本

  • 放弃对 Python 3.4 的支持,因为 Zope 本身不支持它。

  • 添加对 Python 3.8 的支持

4.1 (2018-10-05)

  • 更多 PEP8 合规性。

  • 为 Bootstrap ZMI 添加图标。

  • 使用当前 API 避免弃用警告。

  • 添加对 Python 3.7 的支持。

4.0.0 (2017-05-23)

  • 添加了毒物配置

  • Python 3 兼容性

  • 更新为需要并与 Zope 4 兼容。

3.0 (2016-07-18)

  • 更新依赖项(没有 ZODB,但是 BTrees)

2.14.0 (2015-06-18)

  • 要求 ExtensionClass >= 4.1a1(与 Zope 4 兼容)。

2.13.5 (2015-06-18)

  • 添加了清理例程的案例,其中元类型索引包含不在树中的键。

2.13.4 (2011-12-12)

  • 为BTreeFolder2Base.hasObject方法提供安全声明。

  • 为正确的getattr行为添加一些测试。

  • 次要的 __getattr___getOb优化。

2.13.3 (2011-03-15)

  • keysvaluesitems方法现在与 objectIdsobjectValuesobjectItems 完全相同。他们之前已经做过同样的事情,但复制了代码。

2.13.2 (2011-03-08)

  • 当没有请求特殊规范时, objectValuesobjectItems不再进行特殊处理,因为objectIds已经进行了正确处理。

2.13.1 (2010-08-04)

  • 确保返回对象的方法将它们返回获取包装。

  • 在调用我们自己的键、值和项目方法时要更加小心,因为子类可能已经覆盖了其中的一些。

2.13.0 (2010-07-11)

  • 如果未传递规范参数,则将objectIdsobjectItemsobjectValues方法更改为直接使用内部 OOBTree 方法。

  • 更改keysitemsvalues方法的实现以直接访问 self._tree OOBTree 方法。这避免了在 meta_types 结构中的查找。

  • 实现完整的字典协议,包括__getitem____delitem____setitem____nonzero____iter____contains__

  • 作为单独的包发布。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

Products.BTreeFolder2-4.3.tar.gz (18.9 kB 查看哈希

已上传 source

内置分布

Products.BTreeFolder2-4.3-py2.py3-none-any.whl (17.7 kB 查看哈希

已上传 py2 py3