Database design 脱机模式下的NoSQL数据库和前向兼容性
在做了一些研究之后,似乎当人们询问CouchDB中的模式迁移时,他们很快被反驳说这个概念与NoSQL思想不完全兼容。我理解NoSQL是如何意味着无模式的,它感觉有违直觉。然而,我所处的情况是,我不知道如何完全避免模式迁移。我在移动设备上使用NoSQL。以下是我的主要设置和我的需求Database design 脱机模式下的NoSQL数据库和前向兼容性,database-design,nosql,couchdb,database-schema,database-replication,Database Design,Nosql,Couchdb,Database Schema,Database Replication,在做了一些研究之后,似乎当人们询问CouchDB中的模式迁移时,他们很快被反驳说这个概念与NoSQL思想不完全兼容。我理解NoSQL是如何意味着无模式的,它感觉有违直觉。然而,我所处的情况是,我不知道如何完全避免模式迁移。我在移动设备上使用NoSQL。以下是我的主要设置和我的需求 每个移动设备都有自己的复制数据库 移动设备可以脱机工作 移动设备与云服务器上的数据库进行复制以共享其数据 数据在可能的情况下进行复制,以便不同设备上的多个用户可以处理相同的数据 较新版本的客户端可能会决定更改它为特定键
Paul如果CouchApps是您的一个选项,那么您实际上可以绕过不同客户端版本的问题。以防你不熟悉这些:couchapp是基于HTML+CSS+JavaScript的应用程序,直接由CouchDB提供服务。在移动平台上,将它们嵌入Cordova(Phonegap)以访问本机功能可能会很方便 由于couchapp基本上存储在CouchDB数据库中的设计文档中,因此可以像复制普通文档一样复制它们。这使您可以选择在客户机连接到服务器时执行客户机软件的更新(实际上,任何复制都会自动进行)
如果您想考虑一下这个选项,您可能需要看一看,并且。我要提醒您不要过多地评估关于模式迁移和NoSQL数据库的反驳。“他们”可能会说不存在模式,但如果有任何设计文档,甚至代码期望结构以某种方式存在,对我来说,这就是一个模式(有无文档记录)。无论形式模式如何,更改结构都是一个真正的问题。如果较旧的客户端可以访问/管理/保存较新的数据结构,您似乎面临一个挑战。如果给定文档已升级到新版本,则强制用户更新可能是最安全/最可靠的。谢谢您的回答。强制用户更新是一种可能的解决方案,但它确实对我不想要的用户施加了约束。到目前为止,我正在努力寻找一种对用户体验影响最小的解决方案。很抱歉,我忘了提到我的应用程序是100%原生的。我认为在这种情况下,这不是一个可行的选择。即使是,我还是不知道你在想什么。每次旧版本通过pull接收到新数据时,CouchApps会负责执行前向兼容性操作吗?谢谢你的回答!很遗憾,你没有选择。但我要澄清的是:“前向兼容性操作”将是用一个新的设计文档简单地替换过时的设计文档。如果有更新版本的设计文档可用,则在与服务器的任何复制上都会自动发生这种情况。其核心思想是通过复制以相同的方式处理应用程序代码和数据。