2012-10-19 24 views
2

我正在使用Couchdb(由Cloudant托管)。关于Couchdb的一件很酷的事情是,当你查询一个文档时,它支持标准的基于http etag的缓存(etag是文档的_rev字段)。然而,我注意到,当我请求一个视图时,即使底层文档没有改变,etag在每个请求上也不同,这违背了使用etags最小化数据库服务器流量的目的。在Couchdb/Cloudant视图上使用基于etag的缓存?

是否有我需要调整某个地方来解决这个问题的设置?

编辑:

这里是我的设计文档的链接: https://codeliberate.cloudant.com/crowdfunder/_design/xLgxNgK_dXEQxHbzmEiCbWE_wackXLk83xDp28ShH8Q_

而这里的链接查看输出:https://codeliberate.cloudant.com/crowdfunder/_design/xLgxNgK_dXEQxHbzmEiCbWE_wackXLk83xDp28ShH8Q_/_view/xLgxNgK_dXEQxHbzmEiCbWE_wackXLk83xDp28ShH8Q_

我每次刷新浏览器查看和使用网络控制台检查服务器发送的头文件,我得到一个不同的etag(例如,我刷新的最后三次,分别是34c474c51f0beb87fa13755b9594c52a,39da8a25e57ba660da6a905d8374b26f和6c5862d8d4a9375d484aaa1c1c9e8321)。很确定底层数据在刷新之间没有变化。

回答

2

目前,Cloudant支持在单个文档的ETag缓存(其中ETag的是文档的_rev场),但不是在意见:(

+0

这是新的,我记得couchdb在视图上有etags,因此列出。它是不同的实现(我在2.0.0)? –

2

你所描述的是相当令人惊讶的......只要我不改变文件,我就会得到和以前一样的etag。它与“If-None-Match”标题非常吻合。

你确定你使用“实景”,而不是:

  • 一个临时的看法?
  • 一个列表?
+0

我敢肯定它是一个真正的看法,我只是编辑的问题添加一个链接到视图和输出 – josh

+0

奇怪,我从来没有见过这样的问题,现在我唯一的假设是它可能与CloudAnt特有的实现设计选择有关为了验证这个假设,你应该测试你的示例在一个更标准的Apache CouchDB实现中,比如[IrisCouch's](http://www.iriscouch.com/) –

+0

感谢你指向Iris,没有看过它,我会检查它,如果Cloudant的任何人想要权衡在... – josh