【问题标题】:calling another list function in couchdb在 couchdb 中调用另一个列表函数
【发布时间】:2013-05-20 05:49:14
【问题描述】:

Helo 伙计们,

我正在处理 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” ,“标准开发”等。 但是,这些视图的计算会导致大量资源使用,因为每次都会创建这些视图。

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

谢谢

【问题讨论】:

  • 听起来您应该将extractsum 的逻辑抽象为您可以通过CommonJS 包含并调用您的_list 函数的函数。

标签: javascript function couchdb couchdb-futon


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2014-11-21
    • 1970-01-01
    • 2022-11-30
    • 2017-03-07
    • 2019-09-17
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多