提升序列化库升级

时间:2010-06-09 08:51:39

标签: c++ boost boost-serialization

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

3 个答案:

答案 0 :(得分:9)

Boost.serialization是向后兼容的,但是is not guaranteed to be forwards compatible

这意味着:

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

例如,如果您在两个方向上在客户端和服务器之间发送消息,则可能必须以锁定步骤升级boost的版本。

'电线格式'不会随着每个版本的boost而改变。因此,在两个特定版本的boost之间,您可能没有问题 - 我无法找到在哪个版本的boost中使用哪个版本的归档格式的特定文档。

另请注意,尽管向后兼容性已得到保证,但这只是表达意图 - 尽管我猜你可以收回你的钱;-)。 Boost版本1.42和1.43有一个错误,意味着以后的版本无法读回它们 - see the 1.45 release notes

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

不幸的是,即使您的代码将通过此测试,您也无法100%确保兼容性,因为仍然可能存在某些无法加载的序列化内容。嗯,它总比没有好。

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

boost :: serialization的扩展向前兼容性为answered here