6

使用标准的 CouchDB 视图索引,我可以灵活地反思陈旧与新鲜。如何获得Cloudant 的类似dbcopy功能

CouchDB 查看查询新鲜度

  • 磁盘上的当前索引,可能是陈旧的:stale=ok
  • 磁盘上的当前索引,但触发更新:stale=update_after
  • 最新索引,即使这需要更新索引:不要使用过时标志(又名stale=false

CouchDB 视图新鲜度自省

我可以将 DBupdate_seq与设计文档进行比较update_seq,可以update_seq=true在视图查询中或从GET /db/_design/foo/_info.

大沙发注意事项

BigCouch 的数据库分区和多台服务器稍微模糊了这一点。egupdate_seq是复合物,只能在公差范围内进行比较;stale=false可能会选择不同的分片stale=ok,可能或多或少是最新的;虽然没有办法获得update_seq所有节点(或stale=false查询选择的特定节点)的方法,但可以通过快速发出多个/db/_design/foo/_info查询来欺骗它。在这里有额外的分片/分区内省会很好,但上面的内容仍然适用于我的目的。

克劳德的dbcopy

dbcopy具有大致相同的“最终一致性”特征。查询链式数据库中的文档大致类似于使用group=true&stale=ok. 这很好,大多数时候。但是文档没有给出以下任何指示:

  • 如何查询当前dbcopy状态?例如,数据库是否认为自己是最新的,或者是否在 IOQ 中等待轮到他们的视图更改?如果它不是最新的,大致有多陈旧?
  • 如何触发或提高dbcopy(如stale=update_afterstale=false)的优先级。例如,我想要一些类似的东西POST /origin_db/_design/foo/_view/bar/_dbcopy会立即强制将减少的结果推送到dbcopy数据库(可选地首先更新原始视图)。
  • 如果链接的数据库以某种方式不同步(例如,直接在数据库中删除或更新文档而不是通过dbcopy机制或dbcopy机制丢失了一些文档),可以检测到吗?如何纠正?有dbcopy“重置按钮”吗?
4

1 回答 1

3

如何查询当前的 dbcopy 状态?例如,数据库是否认为自己是最新的,或者是否在 IOQ 中等待轮到他们的视图更改?如果它不是最新的,大致有多陈旧?

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

是否有 dbcopy“重置按钮”?

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

于 2013-05-21T15:27:43.800 回答