【问题标题】:CouchDB supports caching?CouchDB 支持缓存吗?
【发布时间】:2011-02-10 01:14:07
【问题描述】:

CouchDB 是否支持开箱即用的缓存,还是我必须像 Squid 一样在其前面手动设置缓存代理?

【问题讨论】:

  • 是的,它支持网络缓存(带有 etags),开箱即用,无需配置。不,它没有网络缓存。

标签: caching couchdb


【解决方案1】:

简短回答:否。

长答案:是吗?

CouchDB 的整个理念是考虑以后可能要查询的所有内容,现在(在方便时)计算它,并将结果存储在索引中。来自 CouchdB 的所有数据访问都来自扫描这些索引之一,这非常快,而且无论数据量如何(实际上是对数时间),都会花费大致相同的时间。

此外,CouchDB 不会使用太多内存,因为它希望操作系统缓存其磁盘操作。文件系统缓存提供了巨大的性能优势。

最后,CouchDB 支持所有用于缓存的 Web 标准,因此浏览器和 ISP 经常会缓存其中的一部分,而无需任何人做任何特别的事情。

我想我的观点是,对于高 read 负载,CouchDB 通常不需要缓存。 但是,不,没有开箱即用的缓存功能。 CouchDB 使用 HTTP 的原因之一是允许人们使用标准工具来解决他们的问题。许多人在生产环境中确实在 CouchDB 前使用缓存 Web 代理。

【讨论】:

    【解决方案2】:

    它通过ETags 支持一种缓存形式。 (一种 HTTP 缓存机制)

    ETag 与文档_rev 编号相同。您可以发送 If-None-Match 标头以及您的 GET 请求。如果有新版本,服务器会发送。否则,它会发回一个300 Not Modified 标头,让您知道您可以继续使用已有的修订版。

    【讨论】:

    • 但是我前面还是得有一个像squid这样的缓存代理?
    • 在这种情况下我不熟悉 Squid。我想这取决于架构。如果您试图通过添加其他缓存节点来卸载单个服务器上的工作负载,您总是可以让您的 CouchDB 服务器复制到其他节点以帮助分配负载。
    • 你不需要反向代理缓存,但如果你这样做会以内存为代价减少负载。还要注意,网络浏览器也会缓存,所以这个反向代理缓存只会帮助每个用户对每个页面的第一个可缓存命中(重复命中将被缓存在浏览器中)。
    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 2011-08-24
    • 2015-11-30
    • 2010-09-17
    相关资源
    最近更新 更多