CouchDB Erlang复制过滤器 - 比Javascript慢

时间:2016-10-12 04:55:37

标签: performance couchdb replication

我们使用复制过滤器从Couchdb 1.6.1复制couchbase lite。问题是随着文档数量的增加(我们在单个数据库中至少有10万个文档),复制时间变得越来越慢,因为过滤器必须遍历每个文档(和修订版)以确保它与复制过滤器。

我们最初使用Javascript编写过滤器,并且在许多地方建议用Erlang替换它,因为我们可以跳过JSON序列化/反序列化所需的时间,这在Javascript的情况下也是如此沙箱。在erlang中编写过滤器将绕过所有这些,因为它在同一个VM中运行。

通过所有这些并在Erlang中重写我们的过滤器,我们发现Erlang复制过滤器比Javascript慢2,这很奇怪。我一直在阅读Erlang并根据我读过的内容进行尝试,所以没有经验。我们的过滤器相对简单,所以我很难理解它为什么这么慢。

过滤器采用包含id列表的查询字符串。然后,它会遍历几个不同字段中与该id匹配的文档列表,并返回这些文档。对于例如客户可能有联系人,工作,估计等,当查询包含客户ID时,它会为他们提供所有工作,估算,联系等。

我附加过滤器的Javascript和Erlang版本

Javascript版本:http://pastebin.com/c7AqstWy

Erlang版本:http://pastebin.com/fta9JShMhttp://pastebin.com/mseYiUaR (第二个链接是另一个尝试,看它是否会使它更快,因为它根本不需要通过case语句)。

使用Erlang的版本比Javascript版本慢了1.8到2倍。

有人可以看看并强调为什么Erlang过滤器可能会变慢?

0 个答案:

没有答案