我正在使用zlib压缩字符串,然后存储在Aerospike bin中。在检索和解压缩时,我得到“zlib.error:解压缩数据时的错误-5:不完整或截断的流”
当我比较原始压缩数据和检索到的压缩数据时,检索到的数据最后会遗漏一些东西。
我正在使用Aerospike 3.7.3& python客户端2.0.1
请帮忙
由于
更新:尝试使用bz2。抛出ValueError:在检索和解压缩时找不到流的结尾。看起来像空中飞人正在从blob中剥去最后一个字节或其他东西。
更新:发布代码
import aerospike
import bz2
config = {
'hosts': [
( '127.0.0.1', 3000 )
],
'policies': {
'timeout': 1000 # milliseconds
}
}
client = aerospike.client(config)
client.connect()
content = "An Aerospike Query"
content_bz2 = bz2.compress(content)
key = ('benchmark', 'myset', 55)
#client.put(key, {'bin0':content_bz2})
(key, meta, bins) = client.get(key)
print bz2.decompress(bins['bin0'])
获得以下错误:
Traceback (most recent call last):
File "asread.py", line 22, in <module>
print bz2.decompress(bins['bin0'])
ValueError: couldn't find end of stream
答案 0 :(得分:2)
bz.compress
方法返回一个字符串,客户端看到该类型并尝试将其转换为服务器的as_str
类型。如果它在意外位置遇到\0
,它将截断字符串,从而导致错误。
相反,请确保将二进制数据转换为bytearray
,客户端将其转换为服务器的as_bytes
类型。在阅读操作中,bz.decompress
将使用bytearray
数据并返回原始字符串。
from __future__ import print_function
import aerospike
import bz2
config = {'hosts': [( '33.33.33.91', 3000 )]}
client = aerospike.client(config)
client.connect()
content = "An Aerospike Query"
content_bz2 = bytearray(bz2.compress(content))
key = ('test', 'bytesss', 1)
client.put(key, {'bin0':content_bz2})
(key, meta, bins) = client.get(key)
print(type(bins['bin0']))
bin0 = bz2.decompress(bins['bin0'])
print(type(bin0))
print(bin0)
回馈
<type 'bytearray'>
<type 'str'>
An Aerospike Query