如何更改CouchDB中复制的传入文档

如何更改CouchDB中复制的传入文档,couchdb,replication,pouchdb,Couchdb,Replication,Pouchdb,我需要从一个数据库到另一个数据库的数据,但在这个过程中,我想更改在上复制的文档 主要是剥离特定字段(但注释中提到的其他应用程序) 复制始终是100%单向的(但注释中提到的其他应用程序可以使用双向和同步) 我更希望这个过程不增加他们的修订ID,但这可能要求太多 但是我没有看到任何设计文档函数能够完成我正在尝试的工作 因为它似乎不能做到这一点,有什么计划来增加这一点?同时,有什么解决办法?不,没有现成的解决方案,因为这将违背多主MVCC逻辑的整体目的和逻辑 我在这里看到的唯一选择是创建您自己的解决方

我需要从一个数据库到另一个数据库的数据,但在这个过程中,我想更改在上复制的文档

  • 主要是剥离特定字段(但注释中提到的其他应用程序)
  • 复制始终是100%单向的(但注释中提到的其他应用程序可以使用双向和同步)
  • 我更希望这个过程不增加他们的修订ID,但这可能要求太多
  • 但是我没有看到任何设计文档函数能够完成我正在尝试的工作

    因为它似乎不能做到这一点,有什么计划来增加这一点?同时,有什么解决办法?

    不,没有现成的解决方案,因为这将违背多主MVCC逻辑的整体目的和逻辑

    我在这里看到的唯一选择是创建您自己的解决方案,但我不会称之为复制,而是ETL(提取、转换、加载)。对于ETL,有一些工具可以让您实现这一点,比如(这里混合了开源和商业):

    • ,或更具体地说
    • 还有一些工具吗

    市场上还有更多的ETL工具。

    我认为这里最好的方法是将要筛选出的字段分解成单独的文档,然后在复制过程中筛选出文档。

    当然最好的方法是,但是我想到的解决方法是,要编码并使用自定义复制,它将执行所需的额外更改/转换,在许多情况下(特别是如果每个主设备都可以推送到从属设备上),仍然使用而不是使用beneith、其他内置设备,并且具有良好的编码,它认为这几乎同样有效

  • 这需要在每个源/主机上放置有效的触发器来检测任何更改,我相信CouchDB确实提供了(或至少提供了)这些更改,然后将这些更改复制到另一个位置,并进行完整的更改
  • 如果变更源无法将变更推送到最终目的地,则该固定存储可能是本地的,目的地可以从该存储中提取—这可能会非常昂贵,尤其是在多主机系统中,因为每个位置不仅要存储和维护自己的数据,还要存储和维护它发送到的每个人的数据(正在发送)
  • 此复制还将把每个源文档的修订ID放在文档的副本中。。。
  • …这在理想情况下是必要的,如果副本也要{更新,也就是主副本}
  • …形式为:
  • 理想情况下为正常的“_rev”属性。事实上,通过使用内置的“BulkDocsAPI”(看起来我们的变体也会使用它),这看起来是非常可能的(“保留他们的修订ID”)
  • 否则,将有一个新的复制对象(具有自己的_rev)和另一个字段“_rev_original”来填充原始版本。但那会有用吗
  • 很明显,这样的复制品不会有问题
  • 如果目的地只是读取数据,可能没有什么大不了的
  • 如果目的地也在写入数据,则可能会出现问题。因为我们现在必须合并这些非标准修订版。但这是可行的
  • 与此相关(编码定制/改进的复制(以实现这一明显缺失的功能),理想情况下不改变邮袋,尤其是沙发源代码),如初学者/基础材料(标准方法),不幸的是,这里没有明确说明它只使用内置操作,但它看起来像它,而且;我怀疑邮袋可能是用这种方式的
  • 进一步的实施细节那些想知道的人,请把它放在这里

    这是一个“社区维基”的答案,所以请扩展它


    另外,请评论任何人/系统已经或试图这样做或类似的链接和详细信息。

    我需要这样做,而且似乎更大,包括似乎不实际{可通过ETL工具修复}),没有“剥离”任何信息,而是转换它-似乎每个传入和/或传出的记录/文档-没有信息丢失(所以不是{“defy multi-master”}——这仍然可以),而是更改文档的ID(它自己的ID和它引用的所有ID)为了最好地适应每个位置,分散地使ID有效地连续且短。因此,我希望在这方面有更多的帮助。出于上述两个原因以及本页上介绍的3种解决方法的限制/复杂性,我认为应该有对此的内置支持,当然是适当的警告gs作为潜在的{违反多主},但没有被阻止。“傻瓜可能会伤害自己”是不是(永远?)在至少有一些好的理由这样做的情况下不启用,这已经足够好了,正如我们在这里所做的那样。确实是的,有很多情况下这样做会很好,因为,为什么我给出的答案是a+1,但也似乎不总是这样:因为其他情况下,剥离数据可能是有效的关注点:例如,删除/编辑敏感数据字段/属性或其他嵌入的敏感信息太难单独存储,但我们不希望从源代码中获取。