10

我怎么知道我可以在生产系统上安全地升级Boost 序列化库而不破坏与现有数据的兼容性?是否应该执行任何测试以确保新版本的库以二进制格式存储的所有数据都将被新版本成功读取?Boost Serialization 库本身是否保证版本之间的某种兼容性?

4

3 回答 3

10

Boost.serialization 是向后兼容的,但保证向前兼容

这表示:

  • 您可以使用旧版本的 boost.serialization 创建一个存档,该存档可以使用新版本读取。
  • 无法保证使用较新版本的 boost.serialization 创建的存档可以被旧版本读取。

例如,如果您在客户端和服务器之间双向发送消息,您可能必须同步升级boost 的版本。

“有线格式”不会随着每个版本的 boost 而改变。因此,在 2 个特定版本的 boost 之间,您可能没有问题 - 我找不到在哪个版本的 boost 中使用哪个版本的存档格式的具体文档。

另请注意,虽然“保证”向后兼容性,但这只是表达了一种意图——尽管我猜你可以拿回你的钱;-)。Boost 版本 1.42 和 1.43 有一个错误,这意味着以后的版本无法读取它们 -请参阅 1.45 发行说明

于 2011-11-25T19:22:50.950 回答
1

最初的版本是在 Boost 1.32 中。从那时起,您似乎可以在此处查看发布历史记录:http: //www.boost.org/doc/libs/1_43_0/libs/serialization/doc/release.html

除此之外,我建议在提升邮件列表中询问:http: //www.boost.org/community/groups.html#users

于 2010-07-23T08:37:56.517 回答
1

您可以使用当前版本的软件创建测试文件并存储它们。然后将此文件加载到您的自动测试中。

不幸的是,即使您的代码通过了这个测试,您也不能 100% 确定兼容性,因为仍然可能存在某种无法加载的序列化内容。嗯,还是聊胜于无。

此测试将自动仅涵盖向后兼容性。测试前向(向上)兼容性会更加复杂。需要为每个新版本创建测试数据并尝试在每个旧版本中加载它......

boost::serialization 的扩展前向兼容性在此处得到解答

于 2017-11-27T10:31:09.523 回答