Dear wiki user, You have subscribed to a wiki page "Couchdb Wiki" for change notification.
The page "ViewServer" has been deleted by JoanTouzet: https://wiki.apache.org/couchdb/ViewServer?action=diff&rev1=11&rev2=12 - #redirect View_server - A simple introduction to the CouchDB view server. - == The View Server == - - CouchDB delegates computation of [[Views]] to external query servers. It communicates with them over standard input/output, using a very simple, line-based protocol. The default query server is written in Javascript, running via Mozilla !SpiderMonkey. You can use other languages by setting a MIME type in the ''language'' property of a design document or the Content-Type header of a temporary view. Design documents that do not specify a ''language'' property are assumed to be of type ''text/javascript'', as are ad hoc queries that are ''POST''ed to ''_temp_view'' without a ''Content-Type'' header. - - To register query servers with CouchDB, add a line for each server to ''couch.ini''. The basic syntax is: - - {{{ - [Couch Query Servers] - - text/javascript=/usr/local/bin/couchjs -f /usr/local/share/couchdb/server/main.js - text/ruby=/wherever/couchobject/bin/couch_ruby_view_requestor - }}} - - == Basic API == - - This shows you how the view server implementation for your language should behave. If in doubt, look at the ''share/server/main.js'' file in your CouchDB source tree for reference. - - CouchDB launches the view server and starts sending commands. The server responds according to its evaluation of the commands. There are only three commands the view server needs to understand. - - === reset === - - This resets the state of the view server and makes it forget all previous input. If applicable, this is the point to run garbage collection. - - CouchDB sends: - - {{{ - ["reset"]\n - }}} - - The view server responds: - - {{{ - true\n - }}} - - === add_fun === - - When creating a view, the view server gets sent the view function for evaluation. The view server should parse/compile/evaluate the function he receives to make it callable later. If this fails, the view server returns an error. CouchDB might store several functions before sending in any actual documents. - - CouchDB sends: - - {{{ - ["add_fun", "function(doc) { map(null, doc); }"]\n - }}} - - When the view server can evaluate the function and make it callable, it returns: - - {{{ - true\n - }}} - - If not: - - {{{ - {"error": "some_error_code", "reason": "error message"}\n - }}} - - === map_doc === - - When the view function is stored in the view server, CouchDB starts sending in all the documents in the database, one at a time. The view server calls the previously stored functions one after another with the document and stores its result. When all functions have been called, the result is returned as a JSON string. - - CouchDB sends: - - {{{ - ["map_doc", {"_id":"8877AFF9789988EE","_rev":46874684684,"field":"value","otherfield":"othervalue"}]\n - }}} - - If the function above is the only function stored, the views server answers: - - {{{ - [[[null, {"_id":"8877AFF9789988EE", "_rev":46874684684, "field":"value", "otherfield":"othervalue"}]]]\n - }}} - - That is, an array with the result for every function for the given document. If a document is to be excluded from the View, the array should be empty. - === reduce === - - If the view has a {{{reduce}}} function defined, CouchDB will enter into the reduce phase. The view server will receive a list of reduce functions and some map results on which it can apply them. The map results are given in the form {{{[[key, id-of-doc], value]}}}. - - CouchDB sends: - - {{{ - ["reduce",["function(k, v) { return sum(v); }"],[[[1,"699b524273605d5d3e9d4fd0ff2cb272"],10],[[2,"c081d0f69c13d2ce2050d684c7ba2843"],20],[[null,"foobar"],3]]] - }}} - - @@ Is there any guarantee on the ordering? The example appears unordered (null trailing) - - The view-server answers: - - {{{ - [true, [33]] - }}} - - Note that even though the view server receives the map results in the form {{{[[key, id-of-doc], value]}}}, the function may receive them in a different form. For example, the JavaScript view-server applies functions on the list of keys and the list of values. - - === rereduce === - - === log === - - At any time, the view-server may send some information that will be saved in CouchDB's log file. This is done by sending a special object with just one field, {{{log}}}, on a separate line. - - The view-server sends - {{{ - {"log":"A kuku!"} - }}} - - CouchDB answers nothing. - - The following line will appear in {{{couch.log}}}, mutatis mutandum: - {{{ - [Sun, 22 Jun 2008 22:51:25 GMT] [info] [<0.72.0>] Query Server Log Message: A kuku! - }}} - - If you use the JavaScript view-server, you achieve this effect by calling the function {{{log}}} in your view. To do the same thing in ClCouch, call {{{logit}}}. - - == Implementations == - - * [[http://svn.apache.org/repos/asf/incubator/couchdb/trunk/share/server/main.js|JavaScript]] (CouchDB native) - * [[http://common-lisp.net/cgi-bin/darcsweb/darcsweb.cgi?r=submarine-cl-couch;a=summary|Common Lisp]] - * [[http://jan.prima.de/~jan/plok/archives/93-CouchDb-Views-with-PHP.html|PHP]] - * [[http://theexciter.com/articles/couchdb-views-in-ruby-instead-of-javascript|Ruby]] - * [[http://couchdb-python.googlecode.com/svn/trunk/couchdb/view.py|Python]] -