4

在做了一些研究之后,似乎当人们询问 CouchDB 中的模式迁移时,他们很快就被反驳说这个概念与 NoSQL 意识形态不完全兼容。我理解 NoSQL 是如何意味着无模式的,并且感觉违反直觉。然而,我处于这样一种情况,我看不到如何完全避免模式迁移。我在移动设备上使用 NoSQL。这是我的设置和我的需求的主要内容。

  1. 每个移动设备都有自己的复制数据库。
  2. 移动设备可以离线工作。
  3. 移动设备通过云服务器上的数据库进行复制以共享其数据。
  4. 尽可能复制数据,以便不同设备上的多个用户可以处理相同的数据。
  5. 较新版本的客户端可以决定更改它为特定键存储的值类型(即等效于模式更改)
  6. 一旦有可用更新,用户可能不会立即更新应用程序。
  7. 未更新的用户应该仍然能够处理与更新的用户相同的数据。

编辑:

  1. 该应用程序是 100% 本机代码。

我的问题是,拥有旧版本软件客户端的用户不会期望新数据是字符串而不是 int 本身。因此,不能总是在客户端处理它,因为我们不想强迫用户更新他们的应用程序。

换个角度来解释,我希望拥有两个不同客户端版本的两个用户能够共享和修改相同的数据,这意味着我需要具有向后和向前兼容性。向后兼容性通常会得到解决,但前向兼容性有点问题。我需要一种方法来继续使用我上次修改的启发式来解决冲突,同时拥有一个无法完全解释新模式的版本。

经过一番思考,我可以考虑一种将云数据库拆分为多个源的方法;每个移动设备都推送其修改和一对一数据库,移动设备在其中提取适用于其版本的最新数据。在这两者之间的某个地方,我应该处理与模式迁移的向后和向前兼容性。

有没有办法避免模式迁移,即使在这样的设置中?有没有人看到任何其他更简单或更安全的解决方案?这种系统的局限性是什么?我不觉得我在这里完全走在正确的轨道上。

谢谢,保罗

4

1 回答 1

2

如果您可以选择 CouchApps,那么您实际上可以规避不同客户端版本的问题。以防你不熟悉这些:CouchApps 是基于 HTML+CSS+JavaScript 的应用程序,直接由 CouchDB 提供服务。在移动平台上,将它们嵌入 Cordova (Phonegap) 以访问本机功能可能会派上用场。

由于 CouchApp 本质上存储在 CouchDB 数据库中的设计文档中,因此可以像复制普通文档一样复制它们。这使您可以选择在客户端连接到服务器时执行客户端软件的更新(实际上它会在任何复制时自动发生)。

如果您想考虑这个选项,您可能想看看garden20Mobile Futonkansoerica

于 2013-04-25T16:45:27.373 回答