2010-09-03 7 views
3

Comme beaucoup d'entre vous connaissent la réponse d'une vue CouchDB est comme suitCouchDB Views - Lister les performances de la fonction?

{"rows":[ 
    {"key":"1","value":{"Col1":"Some Value"}}, 
    {"key":"2","value":{"Col1":"Another Value"}}, 
]} 

Eh bien, je voudrais collationner que pour

[{"key":"1","value":{"Col1":"Some Value"}}, 
    {"key":"2","value":{"Col1":"Another Value"}}] 

J'envisage d'utiliser une « liste Fonction » pour collationner la réponse, mais je voulais savoir les frais généraux de performance potentiels de faire quelque chose comme ça ?? Cela vaut-il la peine ... ou devrais-je envisager de changer tout mon code pour gérer la réponse différente?

Merci Damo

Répondre

5

Une fonction de liste fonctionne dans un processus séparé (couchjs) qui est relié à couchdb via E/S standard. Les données sont sérialisées vers/depuis JSON pour communiquer avec cette chaîne. En d'autres termes, toutes vos lignes seront sérialisées et envoyées à couchjs; et couchjs renverra les résultats. Par conséquent, une fonction de liste ajoutera (au moins) une latence O (n) pour recevoir vos résultats. Pour les petits (je dis moins de 10 000 documents mais cela dépend de vos besoins) voir les résultats, cela vaut la peine. Pour de très grandes quantités de lignes, vous pouvez bénéficier de la mise à niveau de vos clients.

+1

Comme je pensais alors. Pas idéal car parfois vous passerez un "document" et d'autres une "vue d'un document". Votre code doit donc gérer les deux. J'ai décidé d'utiliser une fonction de liste à la fin pour pousser toutes les valeurs dans un tableau et ensuite envoyer le respone JSOn. Merci de votre aide. – dworrad

+0

Les fonctions de liste peuvent utiliser 'provides()' pour retourner différents types de contenu, peut-être en fonction d'un paramètre donné dans l'objet 'req.query'. – JasonSmith

0

J'utilise JSON_XS pour formater le résultat, puis curl, awk et d'autres utilitaires UNIX pour reformater le résultat. Dans ce cas, l'impression de la jolie JSON ne permet pas:

curl -s -S --compressed -X GET 'your_view_url' | sed -e '/^{"rows"://' -e '/^]}/]/'

Questions connexes