如何触发或检查链式映射的状态reduce(dbcopy)

时间:2013-05-16 15:40:39

标签: couchdb cloudant bigcouch

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

CouchDB查看查询新鲜度

  • 磁盘上的当前索引,可能陈旧:stale=ok
  • 磁盘上的当前索引,但触发更新:stale=update_after
  • 最新的索引,即使需要更新索引:留下过时的标志(a.k.a。stale=false

CouchDB视图新鲜内省

我可以将数据库的update_seq与设计文档update_seq进行比较,可以在视图查询中使用update_seq=true或{{1}获取}}

BigCouch警告

BigCouch的数据库分区和多个服务器略微蒙上阴影。例如。 GET /db/_design/foo/_info是复合材料,只能在公差范围内进行比较; update_seq可能会选择与stale=false不同的分片,这些分片可能或多或少是最新的;虽然没有办法让所有节点(或stale=ok查询选择的特定节点)获得update_seq,但可以通过快速发出多个{{}来欺骗它。 1}}查询。在这里有额外的分片/分区内省会很好,但上面的内容仍然可以用于我的目的。

Cloudant' stale=false

/db/_design/foo/_info具有大致相同的"最终的一致性"特点。查询链式数据库中的文档大致类似于使用dbcopy查询原始视图。哪个好,大部分时间。但是文档没有对以下内容给出任何指示:

  • 如何查询当前的dbcopy州?例如。数据库是否认为自己是最新的,或者是否在IOQ中轮流查看更改?如果它不是最新的,大致有多陈旧?
  • 如何触发或提高group=true&stale=ok的优先级(如dbcopydbcopy)。例如。我想要一些stale=update_after的内容,它会立即强制将缩小的结果推送到stale=false DB(可选择先更新原点视图)。
  • 如果链接的数据库以某种方式不同步(例如,文档被直接删除或更新到DB而不是POST /origin_db/_design/foo/_view/bar/_dbcopy机制或dbcopy机制错过了一些文档),这可能是检测?怎么纠正?是否有dbcopy"重置按钮"?

1 个答案:

答案 0 :(得分:2)

  

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

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

  

是否有dbcopy“重置按钮”?

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