需要有关版本控制/迁移数据的帮助

时间:2011-04-01 17:10:29

标签: c# .net serialization membase enyim

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

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

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

  1. 用于序列化缓存对象的代码版本
  2. 定义不同属性的新版代码
  3. 并有效地迁移像this这样的数据,但是当我们可能在缓存中有数千万个对象时,这是不可取的。理想情况下,我们希望能够仅在必要时才迁移数据。有一些迭代过程,我们可以运行将版本1数据迁移到版本2然后3等等,但我很难想到用二进制数据执行此操作的方法..

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

    谢谢,

1 个答案:

答案 0 :(得分:0)

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

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