使用标准的CouchDB View 索引,我可以灵活地进行自省(introspection)与新鲜度的内省(introspection)。如何获得Cloudant's dbcopy feature的类似功能?

CouchDB View 查询新鲜度

  • 磁盘上的当前索引,可能已过时:stale=ok
  • 磁盘上的当前索引,但触发更新:stale=update_after
  • 最新索引,即使需要更新索引也是如此:保留陈旧标记(也称为stale=false)

  • CouchDB查看新鲜度内省(introspection)

    我可以将数据库的update_seq与设计文档的update_seq进行比较,后者可以在 View 查询中使用update_seq=true或从GET /db/_design/foo/_info获得。

    BigCouch警告

    BigCouch的数据库分区和多个服务器对此造成了轻微的影响。例如。 update_seq是合成的,只能在容差范围内进行比较; stale=false可能会选择与stale=ok不同的碎片,而碎片可能会或多或少是最新的。尽管没有办法获取所有节点(或update_seq查询将选择的特定节点)的stale=false,但可以通过快速发出多个/db/_design/foo/_info查询来欺骗它。在这里进行附加的分片/分区自省(introspection)会很好,但是以上内容仍可用于我的目的。

    Cloudant的dbcopydbcopy具有大致相同的“最终一致性”特征。在链接数据库中查询文档大致类似于使用group=true&stale=ok查询原始 View 。大部分时间都可以。但是文档没有提供以下指示:
  • 如何查询当前dbcopy状态?例如。数据库是否认为自己是最新的,或者 View 更改是否正在等待IOQ?如果不是最新的,它大概有多陈旧?
  • 如何触发或提高dbcopy的优先级(如stale=update_afterstale=false一样)。例如。我想要POST /origin_db/_design/foo/_view/bar/_dbcopy方面的内容,这些内容将立即将减少的结果强制推到dbcopy DB中(可选地,先更新原始 View )。
  • 如果链接的数据库以某种方式不同步(例如,直接在数据库中删除或更新文档,而不是通过dbcopy机制或dbcopy机制错过了一些文档),可以检测到吗?如何纠正?是否有一个dbcopy“重置按钮”?
  • 最佳答案



    我们正在寻找一种更好的方法,但是目前获取dbcopy当前状态的唯一方法是将 View 中的记录与目标数据库中的文档进行比较。



    您可以通过强制重新构建源 View 来重新触发dbcopy。这可以通过更新设计文档以使 View 签名更改-例如向现有 View 添加空格或注释。这有点不雅致,但会导致dbcopy重新运行。

    关于couchdb - 如何触发或检查链接映射图减少的状态(dbcopy),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16591853/

    10-11 05:36