2013-05-20 28 views
0

Helo Folks,在couchdb中調用另一個列表函數

我正在研究couchdb中的視圖。並且,在「提取」列表功能中,我試圖使用該視圖(myView)過濾出一些信息。從連接到couchdb的客戶端,我想要做1件大事 - 顯示「提取」列表功能的結果。但是,我還想對'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的,是有辦法叫「提取物」名單函數在其他列表功能,如「總和」,「中位數」,「標準偏差」等?

原因我想這樣做: -

所有其他列表功能:「總和」,「標準差」等期望的那樣輸入「提取」函數的返回值。所以,在其他列表函數中創建提取函數代碼的冗餘副本是我想要做的最後一件事。

是否有解決這個的另一種方法: -

是的,有一種方法。我曾經想過,我將爲所有這些功能使用另一個視圖功能而不是'myView',並編寫與'myView'中相同的'map'功能,但所有這些視圖都會有單獨的'reduce'功能來計算'sum' ,'standard dev'等。 但是,這些視圖的計算會導致大量資源使用,因爲每次都會創建許多視圖。

你們能否提供比這更好的解決方案?

感謝

+0

這聽起來我像您應該抽象'extract'和'sum'入功能的邏輯可以通過[CommonJS的](HTTP包括://wiki.apache。org/couchdb/CommonJS_Modules)並調用你的_list函數。 –

回答

0

我首先想到的是再次實施意見以減少函數來計算,但你說這太耗費資源。我不知道如何經常使用的意見,如果有一堆訪問之間的變化?

如果他們只是用來產生一些統計報告或某些東西,很少被訪問,當他們做了一堆需要做的視圖索引的變化,也許你可以看看運行一個腳本,定期檢索這些觀點使觀點保持最新,所以當他們被訪問時,他們仍然能夠相對快速地做出反應。

這是我們與我們的所有的我們在我們的生產環境的觀點做,那很好,我想這取決於你的基礎設施,有多少數據你都抽過。

別的東西要考慮,我不知道是否有什麼區別/利益這樣做,但也許是建立在減少功能可以提供比你的自我創造的人更好的性能

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

相關問題