【发布时间】:2014-11-05 09:34:01
【问题描述】:
我的 Java 应用程序具有访问 MongoDB 集合的 REST GET api(使用 JAX-RS 实现)。 我正在尝试引入网络缓存以减少响应时间(通过减少 MongoDB 端的文档读取)。
我正在寻找为资源提供 ETag (http://en.wikipedia.org/wiki/HTTP_ETag) 的标准方式(资源来自 MongoDB 集合中的文档),以便 MongoDB 集合中的 ETag 每次更新文档时都会自动更新。
现在,我可以使用 MongoDB 文档中的 ETag 验证 HTTP 请求(“If-None-Match”)中的 ETag,如果两者相同,则返回 304(未修改)。现在,WebCache 可以将已经缓存的资源返回给客户端,从而提高响应时间。
在谷歌搜索时,我得到了以下 2 个选项:
hascode() as ETag:从 MongoDB 获取文档并填充 Java 对象,然后,计算用作 ETag 的 hashCode()。但是我 想要避免这种开销(完整的文档读取 + 哈希码计算) https://devcenter.heroku.com/articles/jax-rs-http-caching
上次修改日期为 ETag:将新字段“上次修改”添加到 mongoDB 收藏。 http://howtodoinjava.com/2013/06/05/jax-rs-resteasy-cache-control-with-etag-example/ 这种机制更适合“Last Modified”标头(HTTP 回复)。看起来,ETag 在这里误用了日期。在这里我必须 修改现有文档以插入新字段 (updatedTime)。再次, HTML 日期精度为 sec,mongoDB 日期精度为 msec。
请建议在 MongoDB 中提供 ETag 的标准方式。
【问题讨论】:
标签: mongodb