更具互动性的ZODB包装

Mik*_*maa 5 zope plone packing zodb

当前的ZMI管理"包数据库"功能有点粗糙.

1)是否可以为Web UI设置某种进度指示器?例如,一个人知道剩下多少分钟/小时,至少给出一些估计

2)ZODB包装如何影响网站的响应度?是否所有交易都被封锁

3)任何具有进度指示器的命令行脚本都可用,因此您可以从ZEO命令行客户端执行此操作?

4)至少某种日志标记注销输出... [INFO] 30%完成... 3:15去

myr*_*lav 7

包装解剖学

ZODB FileStorage打包是将数据从一个文件选择性复制到另一个文件的过程(只有"年轻"然后指定年龄的事务).在此复制开始之前,一些软索引构建在内存中以帮助处理.因此整个ZODB包装包含以下步骤:

  1. 构建包索引
  2. 将事务复制到临时文件
  3. 附加包装开始后执行的交易
  4. 用打包的文件替换原始的FileStorage,并以读/写模式重新打开它

我通常通过监测相结合的过程中top,vmstat/ dstat,watch ls -la var/filestorage.

正如Geir所说,您可以拥有专门用于包装的独立ZEO客户端.这是合理的,因为你调用的封装从封锁到打包完成.现在没有必要使用ZEO.ZEO服务器提供zeopack直接连接到ZEO的实用程序(不需要专用的ZEO客户端)并启动FileStorage打包.其中一个好处是不需要密码,只需要适当的权限来访问ZEO控件套接字.

包装进度

由于ZEO服务器(甚至不是服务器而是FileStorage本身)执行打包,因此限制了向ZEO客户端正确通信进度的可能性.ZEO协议不是为了传达这种类型的信息而设计的.

IMHO FileStorage本身在通过日志文件进行通信时可能会更加冗长.可以建立一些进展.如果你觉得需要进度指示器,那么你可以通过记录模块设计某种反馈通道回ZEO-client/Zope-in​​stance回传给浏览器.

包装时的性能

由于FileStorage打包是非常密集的磁盘操作,因此会降低磁盘子系统的吞吐量.此外,它还会清除磁盘缓存(在FileStorage较大的情况下),即使在打包完成后也会影响磁盘性能,因为缓存应该再次预热.可能的改进导致更长的打包时间,但对FileStorage中的系统影响较小的是:

  • 恢复O_DIRECT操作(不触摸文件缓存)
  • 减少ionice执行打包的线程的磁盘调度优先级(在Linux上)
  • 节流包装速度