【发布时间】:2020-12-10 02:22:38
【问题描述】:
我可以在下载数据时将数据从 Azure Blob 压缩到 gzip 吗?如果可能,我想避免将所有数据都放在内存中。
我尝试了两种不同的方法(compress_chunk 和 compress_blob)函数。我不确定整个 blob 在压缩之前是否在内存中,或者我是否可以在以某种方式读取它时对其进行压缩。
def compress_chunk(data):
data.seek(0)
compressed_body = io.BytesIO()
compressor = gzip.open(compressed_body, mode='wb')
while True:
chunk = data.read(1024 * 1024 * 4)
if not chunk:
break
compressor.write(chunk)
compressor.flush()
compressor.close()
compressed_body.seek(0, 0)
return compressed_body
def compress_blob(data):
compressed_body = gzip.compress(data.getvalue())
return compressed_body
def process_download(container_name, blob):
with io.BytesIO() as input_io:
blob_service.get_blob_to_stream(container_name=container_name, blob_name=blob.name, stream=input_io)
compressed_body = compress_chunk(data=input_io)
【问题讨论】: