为ZODB记录提供zlib压缩的存储包装器
项目描述
为ZODB记录提供zlib压缩的存储包装器
zc.zlibstorage软件包提供了ZODB存储包装器实现,它提供了数据库记录的压缩功能。
使用方法
主要存储为zc.zlibstorage.ZlibStorage。它作为低级存储的包装器使用。在Python中,通过传递另一个存储来构建它,如下所示
import ZODB.FileStorage, zc.zlibstorage storage = zc.zlibstorage.ZlibStorage( ZODB.FileStorage.FileStorage('data.fs'))
当使用ZODB配置文件时,使用zlibstorage标签
%import zc.zlibstorage <zodb> <zlibstorage> <filestorage> path data.fs </filestorage> </zlibstorage> </zodb>
注意使用了%import来加载zlibstorage标签的定义。
与ZEO一起使用
当与ZEO ClientStorage一起使用时,您需要在存储服务器上使用服务器zlib存储。这是必要的,以便需要获取未压缩记录数据的服务器操作可以这样做。这通过在ZEO服务器配置文件中使用serverzlibstorage标签来实现
%import zc.zlibstorage <zeo> address 8100 </zeo> <serverzlibstorage> <filestorage> path data.fs </filestorage> </serverzlibstorage>
以这种方式在客户端应用压缩具有吸引力,因为除了减少服务器上存储的数据库记录大小外,您还可以减少从服务器发送到客户端的记录大小以及客户端ZEO缓存中存储的记录大小。
仅解压缩
默认情况下,记录在写入存储时进行压缩,在从存储中读取时进行解压缩。可以使用compress选项来禁用记录压缩,但仍然在遇到压缩记录时进行解压缩。以下是一个Python示例
import ZODB.FileStorage, zc.zlibstorage storage = zc.zlibstorage.ZlibStorage( ZODB.FileStorage.FileStorage('data.fs'), compress=False)
以及使用配置b语法
%import zc.zlibstorage <zodb> <zlibstorage> compress false <filestorage> path data.fs </filestorage> </zlibstorage> </zodb>
当部署多个客户端时,此选项很有用。如果您不想一次性更新所有客户端,可以使用不进行压缩但能识别压缩记录的zlib存储库逐渐更新所有客户端。然后,在第二阶段,您可以更新客户端以压缩记录,此时,所有客户端都将能够读取产生的压缩记录。
压缩整个数据库
将数据库中的所有记录进行压缩的一种方法是将无压缩数据库的数据复制到压缩数据库中,如下所示:
import ZODB.FileStorage, zc.zlibstorage orig = ZODB.FileStorage.FileStorage('data.fs') new = zc.zlibstorage.ZlibStorage( ZODB.FileStorage.FileStorage('data.fs-copy')) new.copyTransactionsFrom(orig) orig.close() new.close()
记录前缀
压缩记录以“.z”为前缀。这允许数据库混合压缩和无压缩记录。
独立的压缩和解压缩函数
为了在没有创建存储库的情况下将压缩和解压缩逻辑插入到其他工具中,压缩和解压缩数据记录的功能作为zc.zlibstorage模块级函数提供。
- compress(data)
如果给定数据满足以下条件,则压缩该数据:
它是一个长度超过20个字符的字符串,
不以压缩记录标记''.z''开头,并且
压缩大小小于原始大小。
返回压缩(或原始)数据。
- decompress(data)
如果数据已压缩,则对其进行解压缩。
返回解压缩(或原始)数据。
变更
1.2.0 (2017-01-20)
支持Python 3.6和PyPy。
与ZODB/ZEO 4和ZODB/ZEO 5进行测试。请注意,ServerZlibStorage不能用于ZODB 5连接(例如客户端,这显然没有意义 :-])。(https://github.com/zopefoundation/zc.zlibstorage/issues/5)
在迭代器包装器关闭时关闭底层迭代器。(https://github.com/zopefoundation/zc.zlibstorage/issues/4)
1.1.0 (2016-08-03)
修复了与ZODB5的不兼容性。之前可选且忽略的数据库
invalidate
方法的版本参数现在被禁止。删除对Python 2.6、3.2和3.3的支持。添加了对Python 3.4和3.5的支持。
1.0.0 (2015-11-11)
由Christian Tismer贡献的Python 3支持。
0.1.1 (2010-05-26)
修复了一个打包错误。
0.1.0 (2010-05-20)
初始版本