gpt4 book ai didi

mongodb - MongoDB 文档中的 ETag 工具 - Java 驱动程序

转载 作者:可可西里 更新时间:2023-11-01 09:55:44 26 4
gpt4 key购买 nike

我的 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 个选项:

  1. hascode() as ETag:从 MongoDB 获取文档并填充 Java对象,然后计算用作ETag的hashCode()。但是我 想避免这种开销(完整的文档阅读+哈希码计算) https://devcenter.heroku.com/articles/jax-rs-http-caching

  2. 作为 ETag 的最后修改日期:向 mongoDB 添加新字段“最后修改”收藏。 http://howtodoinjava.com/2013/06/05/jax-rs-resteasy-cache-control-with-etag-example/ 这种机制更适合“上次修改” header (HTTP 回复)。看起来,日期在这里被误用为 ETag。在这里我必须 修改现有文档以插入新字段 (updatedTime)。再次, HTML 日期精度为秒,mongoDB 日期精度为毫秒。

请建议在 MongoDB 中提供 ETag 的标准方法。

最佳答案

我在将对象持久化到 MongoDB 之前进行哈希码计算,将其存储在字段 etag 中。

收到请求时,我可以查找 {"_id": REQUESTED_ID, "etag": {$ne: RECEIVED_ETAG}}

如果没有返回文档,您可能仍然需要查明文档 {"_id": REQUESTED_ID} 是否存在(我知道,但在您的情况下,WebCache 可以处理并返回 404 , 否则 304).

如果它确实返回了一个文档,只需使用它的 etag 属性来填充 ETag header ,并可能将其从返回的正文中删除。

关于mongodb - MongoDB 文档中的 ETag 工具 - Java 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com