Aerospike:zlib / bz2存储和检索没有工作

时间:2016-05-18 11:35:10

标签: aerospike

我正在使用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

1 个答案:

答案 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