Avro中的map和record有什么区别?

3
我正在使用 Apache Avro 完成一个项目,但似乎无法理解它所称的映射。我找不到任何映射使用的示例,并且规范中的示例相当简单:

映射

映射使用类型名称 "map" 并支持一个属性:

  • values: 映射值的模式。

假定地图键为字符串。

例如,从字符串到长整型的映射声明如下:

{"type": "map", "values": "long"}

符合该模式的数据在JSON中可能是什么样子?映射有什么用处,记录不能更好地完成吗?

1个回答

3
我的理解是,这种差异与Java处理具有命名属性的POJO与java.util.Map的方式非常相似。也就是说,Map中条目的名称是任意的、动态的;但数据类型都是相同的类型(但可以是java.lang.Object以表示任何类型)。
也就是说,Maps在条目方面更加灵活,但占用更多的存储空间,并且比POJOs处理速度慢(因为需要通过名称查找,而不是直接索引字段)。
由于需要模式,Avro本身是相当强类型的,这使得像JSON这样更动态的格式使用Maps可能不太吸引人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接