0

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

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

我显然可以对服务器文档进行冗余更新,但这效率低下......

有没有办法“取消同步”文档?

4

3 回答 3

2

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

于 2014-06-11T06:02:22.217 回答
0
  1. 创建从服务器到智能手机的连续轮询复制 - 过滤以防止智能手机上的空间使用过多。
  2. 每当您想释放一些空间时,从最后过滤的复制中删除一些文档的 id,从智能手机中删除它(使用压缩进行真正的清理),并将其 id 保留在一些unsynced_documents列表中。
  3. 每当您想重新同步文档时,从服务器读取它并在智能手机上将其创建为一个全新的文档(忽略修订)。resynced: true您可以在文档的 json中添加一个字段。不要忘记更新复制过滤器和unsycned_documents列表。
  4. 当服务器上“重新同步”的文档发生更改时,它将被复制到智能手机,该智能手机已经有一个具有相同 id 的文档(在智能手机上创建)。这会产生冲突。通过选择服务器的修订来解决冲突(通过使用 删除修订resynced: true)。

我说的是需要单向(服务器-> 用户)复制的情况。即,用户只有读取权限。如果您授予用户写入权限,您应该找到一种方法来区分故意删除文档和“不同步”。

于 2014-06-11T14:07:13.287 回答
-1

在 TouchDB 上查看这个错误。听起来清除功能就是您所需要的。

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

不幸的是,我们还没有在 Cloudant Sync 上公开清除(它在路线图上)。

于 2014-06-10T08:57:54.727 回答