我们选择的编码器是否会显着影响性能?

时间:2016-06-17 20:25:03

标签: google-cloud-dataflow

我无法理解"编码员"的目的。我的理解是我们选择编码器以便教授" dataflow如何以字节格式编码特定对象以及如何评估相等和哈希代码。

默认情况下,或许是错误的,我倾向于说出"实现serializable"几乎所有我的自定义类。这有利于数据流不会抱怨。但是,因为其中一些类是巨大的对象,我想知道性能是否受到影响,而我应该实现一个自定义编码器,在其中我准确指定哪一个或两个字段可用于确定相等和哈希代码等这有意义吗?换句话说,创建自定义编码器(可能只使用一个或两个小的原始字段)而不是默认的串行编码器是否可以提高非常大的类的性能?

1 个答案:

答案 0 :(得分:2)

与其他形式的编码相比,Java序列化非常慢,并且肯定会导致性能问题。但是,仅序列化对象的一部分意味着在进程之间发送对象的其余部分时将被删除。

使用Serializable更好,而且非常简单,你可以使用AvroCoder注释你的类

@DefaultCoder(AvroCoder.class)

这将自动从您的班级中推断出Avro架构。请注意,这不适用于泛型类型,因此您可能希望在这种情况下使用自定义编码器。