2013-05-20 3 views
0

Helo Folks,appelant une autre fonction de liste dans couchdb

Je travaille sur une vue dans couchdb. Et, dans la fonction de liste 'extract', j'essaie de filtrer certaines informations en utilisant cette vue (myView). Du client qui se connecte à couchdb, je veux faire 1 chose importante - montrer les résultats de la fonction de liste 'extrait'. Mais, il y a plusieurs autres choses que je veux effectuer sur les résultats renvoyés par la fonction 'extract'. Une opération simple parmi toutes les autres opérations est 'sum'. Mais, il y a beaucoup d'autres caractéristiques comme le calcul de la médiane/écart-type etc. sur les résultats de la fonction de liste 'extrait'.

{ 
    "_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" : "..." }, 
    } 
} 

Alors, je suis coincé à un moment donné: -

Comme toute la conception doc est un JSON et les corps de fonction sont javascript, est-il un moyen d'appeler la liste « extrait » fonction dans d'autres fonctions de liste comme «somme», «médiane», «écart-type», etc?

Raison pour laquelle je veux faire: -

Toutes les autres fonctions de la liste: « somme », etc « écart-type » attendre la valeur de retour de la fonction « extrait » en entrée. Donc, juste faire des copies redondantes de la fonction de code de l'extrait dans d'autres fonctions de liste est la dernière chose que je voudrais faire.

est-il un autre moyen de résoudre ce: -

Oui, il y a un moyen. J'avais pensé que j'utiliserais une autre fonction de visualisation que 'myView' pour toutes ces fonctionnalités et j'écrirais la même fonction 'map' que dans 'myView' mais, toutes ces vues auront des fonctions 'reduce' séparées pour calculer 'sum' , 'standard dev' etc Mais, le calcul de ces vues a causé beaucoup d'utilisation des ressources car ces nombreuses vues étaient créées à chaque fois.

Pourriez-vous fournir une meilleure solution que celle-ci?

Merci

+0

Il me semble comme vous devriez résumer la logique de 'extract' et' sum' en fonctions que vous pouvez inclure via [CommonJS] (http: //wiki.apache.org/couchdb/CommonJS_Modules) et appelez votre fonction _list. –

Répondre

0

Ma première pensée a été de mettre en œuvre les points de vue à nouveau avec réduire les fonctions pour effectuer les calculs mais vous dites cela est trop de ressources .. Je me demande comment sont souvent les vues utilisées et s'il y a un tas de changements entre les accès? Si elles sont juste utilisées pour produire des statistiques pour des rapports ou quelque chose et sont rarement accessibles que quand ils le font il y a un tas de changements à faire aux index de vue peut-être que vous pourriez envisager d'exécuter un script qui récupère régulièrement Les vues permettent donc de garder les vues à jour. Lorsqu'elles sont accessibles, elles réagissent toujours assez rapidement.

C'est quelque chose que nous avons fait avec tous nos points de vue dans notre environnement de production et cela fonctionne très bien, je suppose que cela dépend de votre infrastructure et de la quantité de données que vous pompez.

Autre chose à considérer que je ne sais pas s'il y a une différence/avantage à le faire, mais peut-être le construit en réduire les fonctions peuvent offrir de meilleures performances que vos proches auto créé

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

Questions connexes