java—在对象类型和静态类型之间执行序列化时的性能差异


0

当要序列化时,是否需要静态地 key入/声明变量的数据类型?它在序列化时是否提高了性能?

我正在为批处理创建一个flink项目。我编写了一个自定义的输入读取器,它将通过jdbc从数据库中读取数据,并以Hashmap的形式返回一个记录,其中包含列名和值。我知道Flink在每个子任务之间序列化对象。所以,我的问题是,既然我有hashmap where类型的值,它对序列化性能有什么影响吗?

Flink默认使用kyro序列化程序

2 答案


0

哈希 map的序列化和反序列化代价高昂。例如,如果您可以使用元组或行来实现这一点,那么性能会更好。或者您可以考虑实现一个自定义 table source代码,然后利用Table/sqlapi及其优化。

最近在apacheflink博客上有一篇关于序列化的详细信息,包括关于性能的一节。我推荐整篇文章,但要了解性能结果,请参阅https://flink.apache.org/news/2020/04/15/flink-serialization-tuning-vol-1.html性能-比较。您的结果肯定会与文章中显示的结果有所不同——序列化性能会因您所做操作的细节而有很大的不同——但其中显示的一般模式值得注意。

很难说你到底能从这些事情中得到多少好处。你必须自己做基准 test才能确定。至于你关于静态输入的问题——我不确定,但我想用Kryo不会有什么不同。


0

谢谢大卫·安德森,这篇文章很有用。我使用行来实现更好的性能,它内部使用object[]。静态类型与类型对象的性能没有差别。和kryo一样,这也没什么不同


我来回答

写文章

提问题

面试题