在couchdb中调用另一个列表函数

时间:2013-05-20 05:49:15

标签: javascript function couchdb couchdb-futon

Helo Folks,

我正在使用couchdb中的视图。并且,在'extract'列表函数中,我试图使用该视图(myView)过滤掉一些信息。从连接到couchdb的客户端,我想做一件大事 - 显示'extract'列表函数的结果。但是,我想对“提取”功能返回的结果执行多项其他操作。所有其他操作中的一个简单操作是“总和”。但是,还有许多其他功能,例如计算中值/标准偏差等“提取”列表功能的结果。

{
   "_id": "_design/myDesigndoc",
   "lists": {
       "extract": "function(head, req){ ...*extract some info the view*: **myView** ...}",
       "sum" : "function(head,req) {...**sum up all the values returned from the 'extract' function above**...}"
    },

    "views": {
        "myView" : { "map" : "..." },
    }
}

所以,我被困在某一点: -

由于整个设计文档是Json,函数体是javascript,有没有办法在其他列表函数中调用'extract'列表函数,如'sum','median','standard deviation'等?< / p>

我想这样做的原因: -

所有其他列表函数:'sum','standard deviation'等预期'extract'函数的返回值作为输入。因此,在其他列表函数中创建提取函数代码的冗余副本是我最不想做的事情。

是否有其他方法可以解决此问题:

是的,有办法。我原本以为我会使用另一个视图函数而不是'myView'来实现所有这些功能,并且编写与'myView'相同的'map'函数,但是,所有这些视图都会有单独的'reduce'函数来计算'sum' ,'标准开发'等 但是,这些视图的计算导致了大量的资源使用,因为每次都会创建许多视图。

你们能提供比这更好的解决方案吗?

由于

1 个答案:

答案 0 :(得分:0)

我的第一个想法是使用reduce函数再次实现视图来进行计算,但是你说这是资源密集型的。我想知道视图的使用频率是多少,访问之间是否有一堆变化?

如果它们只是用于为报告或某些东西生成一些统计信息而很少被访问,那么当它们执行时,需要对视图索引进行一堆更改,也许您可​​以查看运行定期检索的脚本因此它可以使视图保持最新状态,因此当它们被访问时,它们仍然可以相对快速地响应。

这是我们在生产环境中对我们所有观点所做的事情,而且效果很好,我想这取决于您的基础设施以及您需要投放多少数据。

要考虑的其他事项我不确定这样做是否有任何差异/好处但是内置的reduce函数可能提供比自己创建的更好的性能

http://wiki.apache.org/couchdb/Built-In_Reduce_Functions