【问题标题】:Need help on versioning/migrating data在版本控制/迁移数据方面需要帮助
【发布时间】:2011-07-27 20:36:47
【问题描述】:

我正在做一个项目,我将使用Membase(想想 Memcached + 持久性)作为我们的多节点集群的持久层。 我们正在使用Enyim 客户端与缓存通信,并且我们正在使用二进制序列化来序列化/反序列化缓存中的对象。

我们关心的一个问题是我们如何有效地管理对数据模型的更改,如果我们使用普通的 SQL 数据库,我们可以运行更新脚本来更新您的表。

使用 Membase 并处理缓存的二进制对象,我们可以抓取所有缓存的对象并加载两个二进制文件:

  1. 用于序列化缓存对象的代码版本
  2. 定义不同属性的新版本代码

并像this 这样有效地迁移数据,但是当我们可能在缓存中可能有数千万个对象时,这几乎是不可取的。理想情况下,我们希望能够仅在必要时迁移数据并且有一些我们可以运行迭代过程来将版本 1 数据迁移到版本 2,然后迁移到版本 3,依此类推,但我很难想出一种方法来处理二进制数据。

只是摸不着头脑,以前有没有人有过处理这类问题的经验?我们非常乐意使用其他形式的序列化,并且可以简单地将字符串(可能是压缩的)数据存储在缓存中并自己处理序列化。

谢谢,

【问题讨论】:

    标签: c# .net serialization membase enyim


    【解决方案1】:

    考虑修复读取范式,其中新版本的库了解如何识别 V1 或 V2 对象,根据存储对象的版本使用适当的反序列化器,但在接触 V1 对象后将它们重新序列化为 V2 格式.

    这样就无需批量更新所有对象,但最终会将所有对象迁移到 V2 格式。您可以运行后台进程来缓慢抓取 V1 对象并在需要时转换为 V2 对象,以避免最终在读取修复算法中处理 V1 到 Vn 的复杂性。

    【讨论】:

    • 这是我们考虑的事情之一,但我不清楚我如何能够用二进制数据实现这种机制。你有什么例子或参考资料可以阅读吗?
    • @theburningmonk:你能识别一个对象的版本吗?通过检查标题?
    • 是的,我们可以将二进制数据存储在Membase中,并使用前几个字节作为对象的版本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    相关资源
    最近更新 更多