【问题标题】:Data format compatibility between Thrift versionsThrift 版本之间的数据格式兼容性
【发布时间】:2011-01-06 23:31:09
【问题描述】:

我正在尝试升级使用 Thrift 0.2 库进行通信的系统。由于这是相当旧的版本(最新稳定版是 0.5),并且据称性能有显着改进(在 0.4 中),我希望升级。但是,我找不到有关基础数据格式是否存在不兼容更改的信息。基于版本控制方案,希望没有;但由于这些仍然是 1.0 之前的版本,可能对稳定性的期望较低。

我希望了解数据格式本身向后兼容的原因是它允许逐个升级组件。

无论如何:我希望有更多信息的人可以为我指出正确的文档。

【问题讨论】:

  • 在玩过 0.5.0 之后,我注意到生成的代码不是即插即用的——实现扩展的基类具有不同的 API——但幸运的是,线格式看起来确实相同(大小确实至少不会改变)。

标签: java serialization upgrade backwards-compatibility thrift


【解决方案1】:

... 我们没有使用 byte[] 作为二进制字段的底层数据类型,而是切换到使用 ByteBuffer。这意味着我们可以避免在反序列化过程中进行不必要的字节数组分配和复制。这种方法比旧方法快了整整 2.5 倍,这还没有考虑到垃圾收集时间的减少。 您肯定需要对代码进行一些更改才能升级,但您应该仍然觉得值得。

取自"Thrift 0.4.0 Released" 文档。源码相关改动:"Switch binary field implementation from byte[] to ByteBuffer"

【讨论】:

  • 顺便说一句;我终于有机会使用较新版本的 Thrift,虽然更改特定部分可能会带来 2.5 倍的提升,但阅读部分用例的总体提升是 +50%(即阅读相同数量的时间减少了约 33%数据的)。这是相当不错的改进。
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2017-12-13
  • 2012-03-03
  • 1970-01-01
  • 2015-02-11
  • 2016-05-11
  • 2019-08-27
相关资源
最近更新 更多