1

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

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

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

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

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

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

谢谢,

4

1 回答 1

0

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

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

于 2011-04-01T17:28:32.360 回答