与 Redis 一起运行 CouchDB 是否闻所未闻?
Redis 通常与其他存储解决方案(MySQL、PostgreSQL、MongoDB、CouchDB 等)相辅相成。与许多其他 NoSQL 解决方案一样,Redis 并不适用于所有类型的工作负载或情况。Redis 的作者是务实和开放的人,当他们更适应这种情况时,他们经常建议使用其他解决方案而不是 Redis。
因此,Redis 是一个优秀的团队成员,并且通常很容易集成到现有的基础架构中。
这是Redis 与 CouchDB 一起使用的示例。
CouchDB 本身是否适合处理速率限制?
CouchDB 有许多有用的特性来实现 Chris O'Hara 的文章中描述的速率限制策略。例如,它支持对多个文档的批量操作(具有可选的原子性)。“桶跨度”可以存储在单个文档中。可以使用更新处理程序来覆盖计数器的就地增量。
IMO,主要缺少的功能是自动项目过期(CouchDB 不提供 AFAIK)。因此,您必须设计一种巧妙的机制来摆脱 CouchDB 之上的过时数据。
主要问题是 CouchDB 并不是真正为这种工作负载设计的:它是一个面向日志结构的文档数据库。每次计数器必须增加时,都会涉及 JSON 解包/打包操作、要执行的一些 Javascript 代码以及在仅附加文件中编写整个文档的新修订版。您可以在此处找到一篇描述 CouchDB 如何存储其数据的好文章。
我怀疑在 CouchDB 之上实施的速率限制策略不会很好地扩展(I/O 太多、CPU 消耗过多、网络协议效率低下)。例如,CouchDB 是一个 RESTful 服务器;我不会觉得启动客户端 HTTP 操作(对 CouchDB 的 REST 查询)来限制我系统的每个传入 HTTP 查询的速率。
Redis 更适合这种工作负载(快速、内存中、无 I/O、高效的客户端协议、无 JSON 解析/格式化、增量是本机原子操作等......)