Python中Apache Avro的性能非常慢,在对消息和文件进行编码时会产生不同的结果

2024-06-16 11:36:18 发布

您现在位置:Python中文网/ 问答频道 /正文

所以下面的答案是:Encode an object with Avro to a byte array in Python我可以通过ZeroMQ发送消息-但是性能非常缓慢。

这是意料之中的,因为avropython实现是纯Python,而且我们看到FastAvro作者的类似性能注释。AFAIK,FastAvro不能用于生成用于消息队列的消息,它适合于写入文件。在

所以回到上面的链接,我很想知道这个方法是否比实际需要的复杂——Avro DatumWriter不能被本机用来创建适合消息传递的东西,这似乎很奇怪。在

这就引出了我的最后一点(也是我怀疑的原因)。当我使用Getting Started with Avro (Python)示例中的标准示例时,我可以将我的一个二进制文件流式传输到.avro文件中,它的大小大约为5.8MB。当我使用message方法将其编码为字节数组时,最终得到的消息总大小为11MB。为什么这些方法之间有如此大的差异?大概他们会很相似。。。在

请注意,我已经从writer示例中删除了deflate编解码器,以确保它是苹果对苹果的比较。启用deflate时,大小仅为2.8MB。在


Tags: 文件方法答案苹果an消息示例object
1条回答
网友
1楼 · 发布于 2024-06-16 11:36:18

我不确定您是如何发送消息的,但您应该能够使fastavro工作。例如,由于它可以序列化为任何类似文件的对象,因此可以直接检索字节:

from fastavro import dump
from io import BytesIO

# A sample schema.
schema = {
  'name': 'Person',
  'type': 'record',
  'fields': [
    {'name': 'name', 'type': 'string'},
    {'name': 'age', 'type': 'int'}
  ]
}

record = {'name': 'Ann', 'age': 23} # Corresponding record.
buf = BytesIO() # Target buffer (any file-like object would work here).
dump(buf, record, schema) # Serialize record into buffer.
message = buf.getvalue() # The raw bytes of your message.

如果你想检查一下:

^{pr2}$

如果您的邮件有页眉、页脚等,您只需根据需要将它们写入buf。在

最后,关于大小差异,我怀疑会包含大量冗余信息(可能是模式?)。在

相关问题 更多 >