0

直升机人,

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

{
   "_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,有没有办法在其他列表函数(如“sum”、“median”、“standard deviation”等)中调用“extract”列表函数?

我想这样做的原因:-

所有其他列表函数:“总和”、“标准差”等都期望“提取”函数的返回值作为输入。因此,在其他列表函数中复制提取函数的代码是我最不想做的事情。

有没有其他方法可以解决这个问题:-

是的,有办法。我原以为我会为所有这些功能使用除“myView”之外的另一个视图函数,并编写与“myView”中相同的“map”函数,但是,所有这些视图都将具有单独的“reduce”函数来计算“sum” , 'standard dev' 等。但是,这些视图的计算导致了大量的资源使用,因为每次都创建了许多视图。

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

谢谢

4

1 回答 1

0

我的第一个想法是使用 reduce 函数再次实现视图来进行计算,但你说这太耗费资源了。我想知道视图的使用频率以及访问之间是否有大量更改?

如果它们只是用于为报告或其他东西生成一些统计信息并且很少被访问,那么当它们这样做时,需要对视图索引进行大量更改,也许您可​​以考虑运行一个定期检索视图的脚本,以便它使视图保持最新,因此当它们被访问时,它们仍然会相对快速地响应。

这是我们在生产环境中使用我们所有的视图所做的事情,并且效果很好,我想这取决于您的基础架构以及您正在抽取多少数据。

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

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

于 2013-05-21T06:30:20.443 回答