Couchdb-是否有可能;“不礼貌”;复制的文件

Couchdb-是否有可能;“不礼貌”;复制的文件,couchdb,cloudant,touchdb,Couchdb,Cloudant,Touchdb,我正在设计一个系统,使用CouchDB和TouchDB\CloudantSync在用户的智能手机上使用复制缓存数据库。 现在让我们假设我有1000个文档,每个文档都有一个100Kb的附件,我想通过删除一个文档在智能手机上释放一些空间 我希望在删除一些文档后,可以从服务器上再次复制它。 这与删除不同,删除会给文档一个新版本,并避免再次从服务器复制文档(因为智能手机上已删除的文档是未删除文档的子文档) 很明显,我可以对服务器文档进行冗余更新,但这是低效的 有没有办法“取消同步”文档?请查看此文档。听

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

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

很明显,我可以对服务器文档进行冗余更新,但这是低效的

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

请查看此文档。听起来清除功能正是您所需要的

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


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

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

  • 创建从服务器到智能手机的连续\轮询复制-筛选以防止智能手机上占用过多空间
  • 每当您想释放一些空间时,请从上次筛选的复制中删除某些文档的id,从智能手机中删除它(使用压缩进行真正的清理),并将其id保留在一些未同步的文档列表中
  • 每当你想重新同步一个文档时,从服务器上读取它并在智能手机上创建一个完整的新文档(忽略修订版)。您可以向文档的json中添加一个字段
    resynced:true
    。不要忘记更新复制筛选器和未同步的文档列表
  • 当服务器上的“重新同步”文档发生更改时,它将被复制到smartphone,smartphone已经有一个具有相同id(在smartphone上创建)的文档。这将造成冲突。通过选择服务器的修订版来解决冲突(通过使用
    resynced:true
    删除修订版)

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

    来自:“如果您使用_purge来恢复空间,那么几乎可以肯定您使用CouchDB时不适当。开发人员不适当使用_purge的最常见原因是在管理短期数据时(日志条目、消息队列等)。更好的补救方法是定期切换到新数据库并删除旧数据库(一旦其中的条目全部过期)似乎他们在重新复制已清除的文档时也有问题,因为replicator只查看自上次成功复制以来在源数据库上创建的新修订版…此处为CouchDB dev。清除不适用于常规操作。如果您将SSN或信用卡号提交给CouchDB并需要o把它拿出来。虽然我坦率地承认它不是预期用途,但结合命名文档复制,我认为它可能适合使用情况。但是,如果它存在严重问题,我想了解原因。“重新复制”无法工作。用户数据库中已删除的文档是原始文档的子文档,因此从主数据库复制到用户数据库不会重新复制原始文档。@Oren您完全正确。编辑我的答案以反映这一点。