优化Plone网站对象安全索引。
项目描述
实验性安全索引
描述
本软件包旨在解决Plone中一个长期存在的性能问题
在需要重新索引对象安全的情况下,例如通过@@sharing视图添加用户或组的角色时,将无条件地从数据库(ZODB)检索用于共享表单的对象及其所有内容树中的子对象,并重新索引其安全属性(allowedRolesAndUsers)。
这可能会在某些网站上导致性能极差,具体取决于大小(对象数量)和工作流程复杂性。
安装
要安装此软件包,将实验性安全索引添加到您的Plone站点 eggs,并重新运行buildout
测试
此软件包提供了一些简单的基准测试,旨在作为健全性测试,回答以下问题
“我们是否至少比默认实现快?”
这些基准测试不应被视为权威的,也不应表明您在真实站点上应该期望的性能。
为此,确定结果的最佳方式是在您的站点开发/预发布版本中安装软件包并针对一些真实数据执行。
安装方法与上述相同,但添加额外的[benchmarks,tests]
有关详细信息,请阅读基准文档。
Plone 4.x站点中的现有行为
当在特定文件夹类内容项上分配本地角色给用户时,该文件夹将被索引以及所有其子项(子文件夹) - 无条件。
这取决于以下组合
树的结构
子内容项的数量(正在编辑的对象下子树的深度和宽度)
目前,该行为通过方法 reindexObjectSecurity 实现了两次(Dexterity和Archetypes)。此方法在本地角色被操作的上下文中调用,以反映在 ZCatalog 中的 allowedRolesAndUsers Keywordindex 中的更改。
allowedRolesAndUsers 索引用于Plone以确定用户可以看到哪些内容。例如
在网站搜索中
在Plone 4.x站点中,reindexObjectSecurity API的两个实现是
Products.CMFCore.CMFCatalogAware.CatalogAware.reindexObjectSecurity(skip_self=False):索引内容项(self)。当从 @@sharing 动作调用时,关键字参数 skip_self 将为 False。对于内容项“下”此内容项的每个子节点,通过 ZCatalog.unrestrictedTraverse API 获取该对象,最终通过索引每个子节点,无条件。
Products.Archetypes.CatalogMultiplex.CatalogMultiplex:archetypes 工具用于查找已为内容项(self)的 meta_type 注册的所有目录。
- 注意:这两个实现都实现了 Products.CMFCore.interfaces.ICatalogAware 接口。
。
昂贵的操作似乎是
通过 unrestrictedTraverse “唤醒”每个子节点
当分配有意义的本地角色时,本地角色索引器(Products.CMFPlone.CatalogTool.allowedRolesAndUsers)调用 Products.PlonePAS.plugins.local_roles.LocalRolesManager.getAllLocalRolesInContext API,为每个要索引的对象执行以下算法
获取内部上下文。
获取内容对象及其父对象,并计算内容对象的唯一本地角色集。
如果未设置 __ac_block_local_roles__,则退出并返回计算出的本地角色。
重复 2,直到父对象为 None(树的根)。
解决之前描述的性能问题的任何解决方案的目标是
尽可能唤醒最少的对象。
当本地角色信息没有更改时,避免重新索引。
以下方案是为了优化上述算法
当一个对象首次索引 CatalogTool.indexObject 时,持久化一个代表唯一本地角色集和 __ac_local_roles_block__ 标志的唯一令牌,以及对象 id 和物理路径,在具有与主内容树(ZODB)相同形式的“阴影树”中。
尽可能避免重新索引,避免唤醒内容对象
- 2.1 给定一个内容项 obj,确定需要重新索引的子对象集
从阴影树中检索对应于 obj 的节点,以及代表 obj 的对应子代的节点,并按唯一本地角色对这些节点进行分组
2.2 对于每个节点组,检索对应于组中第一个节点的内容对象
2.3 询问第一个对象其 allowedRolesAndUsers(即本地角色)
- 2.4 索引组中的每个节点,提供一个假对象(即阴影节点或其他代表内容对象的对象)
。
致谢
这项工作是在 Plone Intranet 项目 的部分完成的。工作由 Netsight Internet Solutions 赞助。
变更日志
0.6 (2014-06-04)
尚未更改。
0.5 (2014-06-04)
尚未更改。
0.4 (2014-06-04)
修复版本元数据,为新版本提升版本号。
0.2 (2014-06-04)
纠正包元数据。
更新 README.rst 以删除错误命名的分支在徽章 URL 中。
同步/查看状态的控制面板配置程序。
使用itertools对节点进行分组
shadowtree工具现在是一个站点本地工具(但由全局实用程序管理)
添加功能测试
0.2dev(未发布)
0.1dev(未发布)
0.1 (2014-05-16)
初始pypi发布。
0.1 (2014-05-16)
初始pypi发布。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源代码分发
实验性.securityindexing-0.6.zip的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 899450c4abb0ad2f80cbdfceef7f089a80ee1ee7fbc4ba706f01817b06a833e5 |
|
MD5 | bcda09e8993fbcb6a5488d86dec8141b |
|
BLAKE2b-256 | 193514e52eaa8ff714b62c741fa8ba0dd66b871a6f2f80666c84933572fc042d |