Couchdb - 是否可能“复制”复制的文档

时间:2014-06-10 07:50:37

标签: couchdb cloudant touchdb

我正在设计一个系统,它将使用CouchDB和TouchDB \ CloudantSync来缓存用户的数据库。智能手机使用复制 现在让我们说我有1000个文档,每个文档都有一个100Kb的附件,我想通过删除文档来释放智能手机上的一些空间。

我希望在删除某些文档后,我可以再次从服务器复制它。 这与删除不同,后者将为文档提供新的修订版本,并避免再次从服务器复制它(因为智能手机上已删除的文档是未删除文档的子文件。)

我显然可以在服务器文档上进行冗余更新,但这样做效率不高......

有没有办法去" unsync"文件?

3 个答案:

答案 0 :(得分:2)

您可以在本地为每个用户创建一个数据库,用户的智能手机设置为连续复制。然后,要将文档推送给用户,请将其从主数据库复制到本地用户数据库,以便由复制获取。要远程删除它,只能在本地用户db中删除它,传播删除。要将其重新复制到设备,您必须使用主数据库中的原始文件手动覆盖已删除的文档。

答案 1 :(得分:0)

  1. 创建从服务器到智能手机的连续\轮询复制 - 过滤以防止在智能手机上使用太多空间。
  2. 每当你想释放一些空间时,从最后一次过滤的复制中删除一些文档的id,从智能手机中删除它(使用压缩进行真正的清理),并将其ID保存在某些 unsynced_documents < / em> list。
  3. 每当您想要重新同步文档时,请从服务器中读取文档并在智能手机上创建它作为一个完整的新文档(忽略修订版本)。您可以在文档的json中添加字段resynced: true。别忘了更新复制过滤器和 unsycned_documents 列表。
  4. 当&#34; resynced&#34;文档更改在服务器上,它将被复制到智能手机,智能手机已经有一个具有相同ID的文档(在智能手机上创建)。这将产生冲突。选择服务器的修订版(通过删除带有resynced: true的修订版)来解决冲突。
  5. 我在谈论需要单向(服务器 - &gt;用户)复制的情况。即,用户仅具有读取权限。如果您授予用户写入权限,您应该找到一种方法来有意删除文档和&#34;取消同步&#34;。

答案 2 :(得分:-1)

查看此bug on TouchDB。这听起来像清除功能是你需要的。

但是,这可能会影响重复复制,如错误中所述。我不确定TouchDB是否支持命名文档复制,我认为这就是你解决标准复制行为的方法。

不幸的是,我们还没有暴露出对Cloudant Sync的清除(它在路线图上)。