提高CouchDB&x27的速度;s_在应用过滤器时更改馈送

提高CouchDB&x27的速度;s_在应用过滤器时更改馈送,couchdb,Couchdb,当有多个观察者时,CouchDB的\u changes提要的性能很差,这使我遇到了麻烦 我让CouchDB在笔记本电脑上的虚拟机中运行,多个iOS客户端使用CouchDB的HTTP API在网络上的一个数据库上使用\u changes?feed=continuous。随着客户机数量的增加,更改的速度会减慢到爬行速度 注意,我实际上是通过一个Apache反向代理与CouchDB通信的,该代理压缩响应 我还注意到,当对提要应用过滤器时,它通常会运行很长时间,而不会对HTTP流进行任何更改。就好像我在

当有多个观察者时,CouchDB的
\u changes
提要的性能很差,这使我遇到了麻烦

我让CouchDB在笔记本电脑上的虚拟机中运行,多个iOS客户端使用CouchDB的HTTP API在网络上的一个数据库上使用
\u changes?feed=continuous
。随着客户机数量的增加,更改的速度会减慢到爬行速度

注意,我实际上是通过一个Apache反向代理与CouchDB通信的,该代理压缩响应

我还注意到,当对提要应用过滤器时,它通常会运行很长时间,而不会对HTTP流进行任何更改。就好像我在等待它检查一批不符合筛选条件的文档


是否有任何设置或优化可以帮助加速这一切?

当您意识到couchdb已经要求查询服务器评估filter()函数时,延迟随着过滤更改提要的使用者数量的增加而增加并不奇怪。显然,它不会缓存结果,因此它必须为每个使用者执行此操作


您可以尝试删除filter参数,改为使用include\u docs=true。这样,提要生产者就不必要求视图服务器评估更改。这将使它更具响应性。当然,这样做的代价是显著增加提要中传输的数据量,并且必须在客户端复制filter()函数逻辑。这并不理想,但我认为值得一试。

看看答案会很有趣。我即将推出一个使用这些更改的解决方案,但我想让“一个”消费者使用这些更改,并在自己的消息队列上发布和/或使用WebSocket等发布。这不是一个坏主意。不过,我正在应用的过滤器实际上需要一个可变参数,因此我需要为不同的可能过滤器提供多个缓存。我已经使用反向代理引入了大量的复杂性,这样我就可以获得压缩的内容。我实际上已经使用了
include\u docs
参数,因为我使用的是changes提要作为从coach获取数据的全部和结束。理想情况下,我希望使用
bulk\u docs
来提取大量数据(能够使用视图,速度更快),但它没有给我更新序列,因此我不知道从哪里开始收听
\u更改
提要。不过,我可能会尝试一下这种技术,看看我的性能是否得到了改善。它并不是更快,还是差不多的<代码>\u changes也是一个视图。您可以将其视为使用
emit(db_seq(doc),null)
生成的视图。当您使用
since
查询它时,如果您使用了
startkey
,则与之类似。一旦您删除
filter
param,您应该会看到速度有了很大的提高。根据一些测试的结果,我将此标记为答案。我在终端中对响应进行计时(
time curl…
),发现过滤器将响应增加了几个数量级。对于~6k文档,
\u changes
响应时间(平均)为4秒(无过滤器),而在应用过滤器的情况下,响应时间跳至40秒。