CouchDB中的上一个和下一个文档

时间:2011-10-13 15:33:35

标签: sorting timestamp couchdb

我有一个包含具有浮点时间戳的项目的数据库。当用户访问具有URL /item/id/<the-id-here>的页面时,应显示具有相应标识符的文档(这很容易)以及按时间顺序的前一个和下一个文档的链接(如果存在)。

这些链接必须是持久的,并且项目会根据外部条件在各种时间戳上出现和消失,因此我无法在URL中缓存这些标识符中的一个或两个。

现在,我正在使用按时间戳排序的视图来进行两个查询(一个降序,一个升序),以便获取上一个和下一个文档。

  • 我可以用更少的请求执行此操作吗?
  • 如果对象的时间戳非常接近,我担心浮点精度会造成混乱。我怎么能避免这个?

2 个答案:

答案 0 :(得分:0)

是否有可能以某种方式在数据库中维护每个文档的上一个/下一个文档? 它取决于您拥有的读/写比率,但在每次插入/删除时执行这两个查询可能比在每个页面视图中更快。

答案 1 :(得分:0)

不确定您是否仍在努力解决此问题,但如果是这样,您可以尝试以下操作:

  1. 将时间戳输出为日期数组:[2012, 04, 30, 03, 20, 35]
  2. 使用?startkey=[2012, 04, 30, 03, 20, 0]&endkey=[2012, 04, 30, 03, 20, 60] 获取最后一分钟(或小时,天等)索引中的键/值范围 取决于你发射的粒度。
  3. 在客户端代码中使用您正在寻找兄弟姐妹的文档的时间戳,然后从数组/哈希表/字典/ vector /中获取其兄弟姐妹。
  4. 这会让你得到一个单一的GET请求,并且需要更大的响应大小。但是,如果您使用HTTP If-Not-Match / ETag标头和一些客户端缓存,您可以通过单个请求获取更大范围的文档 - 缓存列表对于日期或星期范围并使用该缓存数组/以及后续查找对服务器的“更轻”命中(因为它只检查ETag值并返回“仅”{{1}响应代码。

    FWIW,它也适用于Couchbase Server 2.0 API(因为它基于CouchDB的View系统/ API)。

    希望有所帮助。