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

calling another list function in couchdb

本文关键字:列表 函数 另一个 couchdb 调用      更新时间:2023-09-26

大家好,

我正在couchdb中的视图上工作。并且,在'extract'列表函数中,我试图使用那个视图(myView)过滤掉一些信息。从连接到couchdb的客户端,我想做一件主要的事情——显示"extract"列表函数的结果。但是,我想对从'extract'函数返回的结果执行多个其他事情。在所有的操作中,一个简单的操作就是"sum"。但是,还有许多其他功能,如计算"提取"列表函数的结果的中位数/标准差等。

{
   "_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'等?

我想这样做的原因:-

所有其他列表函数:'sum', 'standard deviation'等都期望'extract'函数的返回值作为输入。因此,只是在其他列表函数中复制提取函数的代码是我最不想做的事情。

是否有其他方法来解决这个问题:-

是的,有一个方法。我曾想过我会使用另一个视图函数而不是'myView'的所有这些功能,并编写相同的'map'函数在'myView',但是,所有这些视图将有单独的'reduce'函数计算'sum', '标准开发'等。但是,这些视图的计算导致了大量的资源使用,因为每次都要创建这些视图。

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

谢谢

我的第一个想法是用reduce函数再次实现视图来进行计算,但是你说这太资源密集了。我想知道视图使用的频率,如果在访问之间有一堆更改?

如果它们只是用来生成一些统计报告或其他东西,很少访问,当他们做的时候,有一堆的变化需要对视图索引,也许你可以看看运行一个脚本,定期检索视图,使视图保持最新,所以当他们被访问时,他们仍然响应相对较快。

这是我们在生产环境中对我们所有的视图所做的事情,它工作得很好,我想这取决于你的基础设施和你正在泵送的数据量。

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

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