avro和protobufs中的架构设计

时间:2018-03-28 23:58:09

标签: schema protocol-buffers avro parquet protobuf-c

目前我们存储的很多数据都是以avro记录或序列化的protobuf字节的形式存在的。我想看看如何为我的数据设计一个有效的模式,以提高数据流水线的读取/解析序列化速度。

例如,考虑以下情况

Schema A : Column 1 : columnName : "eventType", type : string
           Column 2 : ColumnName : "Data", type : bytes

Schema B : Column 1 : columnName : "DataEventTypeA" : bytes
           Column 2 : columnName : "DataEventTypeB" : bytes
           Column 3 : columnName : "DataEventTypeC" : bytes
           ... so on basically flattening out Data column for each evenType

在我目前的设置中,我有多个管道读取格式模式A中的数TB数据,然后根据eventType过滤掉大量数据。一些eventTypes是非常罕见的,所以即使很少见,他们仍然必须读取太字节数据然后过滤掉大部分数据 即使模式B看起来更丑,但是因为我知道在给定管道中为给定事件类型读取哪个特定列,我可以在avro或proto中创建投影模式(即只有我想要读取/反序列化的字段)然后解析器将忽略未知列,并且与模式A相比,读取和反序列化的数据要少得多。因此,处理罕见事件的管道读取的数据少得多,而不是太字节,尽管我同意我的代码将事件类型映射到模式会稍微有点难看和列名。

因此,考虑到我的用例,我应该考虑更喜欢宽柱状模式与窄表和长表相比较吗?或者我正在做一些反设计模式。我知道柱状存储会更好但是因为我的事件都是记录格式,我有什么明显的缺点吗?

0 个答案:

没有答案