Java 数据序列化框架
我不熟悉这个apacheavro(序列化框架)。我知道序列化是什么,但为什么会有单独的框架,如avro、thrift、协议缓冲区和Java 数据序列化框架,java,serialization,avro,Java,Serialization,Avro,我不熟悉这个apacheavro(序列化框架)。我知道序列化是什么,但为什么会有单独的框架,如avro、thrift、协议缓冲区和 为什么我们不能使用java序列化api而不是这些单独的框架,java序列化api中是否存在任何缺陷 下面这个短语是什么意思 在avro或任何其他serializatio框架中,“架构更改时不需要运行代码生成程序” 请帮助我理解所有这些 为什么我们不能使用java序列化api而不是这些单独的框架,java序列化api中是否存在任何缺陷 我假设您可以使用Java序列化,
- 您知道存在性能问题
- 您需要跨语言交换数据。Java序列化仅适用于Java
关于第二个问题,我想这意味着在序列化类的结构发生变化的情况下,不需要运行任何生成代码的预编译作业。我个人讨厌强制生成某种编译时代码的框架。我讨厌查看生成的代码的麻烦,但这只是我和我的ocd。Avro做得很好的两个原则:Hadoop的MapReduce和通信协议结构。我将它用于MapReduce,我将大量数据实例放在一个文件中,所有这些实例都符合特定的模式;每一条记录都存储得非常高效,标记描绘了每一条记录。Hadoop还使用它在Map和Reduce任务之间进行数据通信。比将字段名与数据一起存储要好得多。这些文件很容易分割成多个部分,以便在分布式计算环境中进行处理。由于模式被嵌入到文件中,读者不必知道数据是什么样子。Avro不受任何语言的限制,有几种语言API可用于读取Avro数据。如果您想写出一个复杂的对象,那么Java的序列化或Avro就可以了。如果您想要更大的功率和效率,并且正在使用数百万个实例,那么Avro是一个不错的选择。我相信您可以用JavaAPI来实现这一点,但为什么要这么努力呢 有一些机制可以通过模式解析规则来演化模式。还有一些工具可以将java对象转换为模式
最好从这里开始:可能需要读几遍才能了解要点。尝试使用Avro软件包附带的一些工具后,请再次阅读。阿夫罗需要一段时间来掌握窍门。JSON仅用作数据规范语言,不用于存储数据。您可以使用API或JSON文件生成模式。有很多灵活性和足够的绳子,很容易陷入麻烦——这是值得的。我支持你说的:首先尝试Java序列化。如果是拳头,那太棒了!你什么都不用做。但是,需要几分钟来考虑序列化将使用哪种方法。你需要快点吗?有一个小的输出?简单一点?您需要输出是自描述性的吗?您需要能够推送信息的增量,而不是序列化整个对象?你真的需要二进制文件吗?以此类推,…+1即使带宽不是问题,Java序列化的性能也可能非常差。完全同意,检查这个基准测试,它可能有用是的,我做的一个测试包括ByteBuffer和回收对象。