database-design - 离线模式下的 NoSQL 数据库和向前兼容性

标签 database-design nosql couchdb database-schema database-replication

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

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

  • 编辑:
  • 该应用程序是 100% native 代码。

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

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

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

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

    谢谢,
    保罗

    最佳答案

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

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

    如果你想考虑这个选项,你可能想看看 garden20 , Mobile Futon , kansoerica .

    关于database-design - 离线模式下的 NoSQL 数据库和向前兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216805/

    相关文章:

    CouchDB 对 _users 数据库的读/写限制

    database-design - 如何在 couchdb 中为简单的相册构建数据库设计?

    database - 高性能网络服务器设计

    postgresql - 使用 UNION ALL 从多个表中获取行或在生产中使用一个表?

    node.js - 如何在 CouchDB 中实现唯一键约束

    c# - 用于金融时间序列数据的 NoSql(例如 RavenDB)?

    .net - 将 RavenDB 用于具有复杂用户对象权限模型的解决方案

    mysql - 如何安排MySQL数据库跟踪关联到多个主键的用户?

    sql - 使用日期维度表比直接存储日期有什么优势?

    sql - 您应该为固定选项创建单独的表吗?