writing couchdb views using clojurescript
DESCRIPTION
Write your views/filters/validators in Clojure(Script), run the results in CouchDB/Couchbase/Cloudant — no special view servers, no special configuration, no JavaScript!More info: http://wp.me/p10OJi-bLTRANSCRIPT
![Page 1: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/1.jpg)
Writing CouchDB Views using
ClojureScript
Chas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
![Page 2: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/2.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerick
Tuesday, October 11, 2011
![Page 3: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/3.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Tuesday, October 11, 2011
![Page 4: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/4.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Clojure full-time since 2008
Tuesday, October 11, 2011
![Page 5: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/5.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Clojure full-time since 2008
Contributor to Clojure language & libraries
Tuesday, October 11, 2011
![Page 6: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/6.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Clojure full-time since 2008
Contributor to Clojure language & libraries
CouchDB user since 2009?
Tuesday, October 11, 2011
![Page 7: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/7.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Clojure full-time since 2008
Contributor to Clojure language & libraries
CouchDB user since 2009?
O’Reilly author
Tuesday, October 11, 2011
![Page 8: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/8.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute
Tuesday, October 11, 2011
![Page 9: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/9.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
Tuesday, October 11, 2011
![Page 10: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/10.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
Tuesday, October 11, 2011
![Page 11: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/11.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
• HTTP API
Tuesday, October 11, 2011
![Page 12: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/12.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
• HTTP API
• Secondary indexes / queries provided by ‘views’
Tuesday, October 11, 2011
![Page 13: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/13.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
• HTTP API
• Secondary indexes / queries provided by ‘views’
• viz. materialized views in SQL-land
Tuesday, October 11, 2011
![Page 14: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/14.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
• HTTP API
• Secondary indexes / queries provided by ‘views’
• viz. materialized views in SQL-land
• Defined by Javascript functions applied within a flavour of map/reduce
Tuesday, October 11, 2011
![Page 15: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/15.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
• HTTP API
• Secondary indexes / queries provided by ‘views’
• viz. materialized views in SQL-land
• Defined by Javascript functions applied within a flavour of map/reduce
• Same mechanism used elsewhere (filters, validation, etc)
Tuesday, October 11, 2011
![Page 16: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/16.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
Tuesday, October 11, 2011
![Page 17: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/17.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
• CouchDB library for Clojure
Tuesday, October 11, 2011
![Page 18: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/18.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
• CouchDB library for Clojure
• (Javascript) view creation and querying support:
Tuesday, October 11, 2011
![Page 19: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/19.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
• CouchDB library for Clojure
• (Javascript) view creation and querying support:
(save-‐view "count" :number-‐of-‐players {:map "function(d){for (var k in d.players) {emit(d.players[k],1);}}" :reduce "function (keys, values) { return sum(values); }"})
Tuesday, October 11, 2011
![Page 20: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/20.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
“Javascript sucks”
Tuesday, October 11, 2011
![Page 21: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/21.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
“Javascript sucks”
Q.E.D.
Tuesday, October 11, 2011
![Page 22: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/22.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
Tuesday, October 11, 2011
![Page 23: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/23.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
• Use Clojure to write view functions:
Tuesday, October 11, 2011
![Page 24: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/24.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
• Use Clojure to write view functions:
(save-‐view "count" :number-‐of-‐players (with-‐clj-‐view-‐server {:map (fn [doc] (map #(vector % 1) (:players doc))) :reduce (fn [keys values _] (reduce + values))}))
Tuesday, October 11, 2011
![Page 25: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/25.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
• Use Clojure to write view functions:
(save-‐view "count" :number-‐of-‐players (with-‐clj-‐view-‐server {:map (fn [doc] (map #(vector % 1) (:players doc))) :reduce (fn [keys values _] (reduce + values))}))
• Better, but:
Tuesday, October 11, 2011
![Page 26: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/26.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
• Use Clojure to write view functions:
(save-‐view "count" :number-‐of-‐players (with-‐clj-‐view-‐server {:map (fn [doc] (map #(vector % 1) (:players doc))) :reduce (fn [keys values _] (reduce + values))}))
• Better, but:
• Increases operational complexity
Tuesday, October 11, 2011
![Page 27: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/27.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
• Use Clojure to write view functions:
(save-‐view "count" :number-‐of-‐players (with-‐clj-‐view-‐server {:map (fn [doc] (map #(vector % 1) (:players doc))) :reduce (fn [keys values _] (reduce + values))}))
• Better, but:
• Increases operational complexity
• Won’t work on hosted platforms, e.g. Cloudant
Tuesday, October 11, 2011
![Page 28: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/28.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
Tuesday, October 11, 2011
![Page 29: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/29.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
• Clojure : JVM :: ClojureScript : JavaScript
Tuesday, October 11, 2011
![Page 30: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/30.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
• Clojure : JVM :: ClojureScript : JavaScript
• Ahead-of-time compilation (no eval)
Tuesday, October 11, 2011
![Page 31: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/31.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
• Clojure : JVM :: ClojureScript : JavaScript
• Ahead-of-time compilation (no eval)
• (Optionally) uses Google Closure’s optimizing compiler
Tuesday, October 11, 2011
![Page 32: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/32.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
• Clojure : JVM :: ClojureScript : JavaScript
• Ahead-of-time compilation (no eval)
• (Optionally) uses Google Closure’s optimizing compiler
• Eliminate need for Clojure/Clutch view server & need to write views in JavaScript!
Tuesday, October 11, 2011
![Page 33: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/33.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Demo
Tuesday, October 11, 2011
![Page 34: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/34.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language Mapping
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 35: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/35.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 36: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/36.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
emit([doc.a, doc.b], doc.c);
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 37: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/37.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
emit([doc.a, doc.b], doc.c);
ClojureScript
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 38: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/38.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
emit([doc.a, doc.b], doc.c);
ClojureScript
(js/emit
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 39: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/39.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
emit([doc.a, doc.b], doc.c);
ClojureScript
(js/emit
(array (aget doc “a”)
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 40: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/40.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
emit([doc.a, doc.b], doc.c);
ClojureScript
(js/emit
(array (aget doc “a”)
(aget doc “b”))
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 41: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/41.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Language MappingJavascript
emit([doc.a, doc.b], doc.c);
ClojureScript
(js/emit
(array (aget doc “a”)
(aget doc “b”))
(aget doc “c”))
Thankfully, you don’t need to do much if any interop in views…
Tuesday, October 11, 2011
![Page 42: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/42.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
Tuesday, October 11, 2011
![Page 43: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/43.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
• ClojureScript is not a library (yet!)
Tuesday, October 11, 2011
![Page 44: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/44.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
• ClojureScript is not a library (yet!)
• Cannot be depended upon in Leiningen/Maven
Tuesday, October 11, 2011
![Page 45: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/45.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
• ClojureScript is not a library (yet!)
• Cannot be depended upon in Leiningen/Maven
• Cannot target / test against particular versions (there aren’t any)
Tuesday, October 11, 2011
![Page 46: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/46.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
• ClojureScript is not a library (yet!)
• Cannot be depended upon in Leiningen/Maven
• Cannot target / test against particular versions (there aren’t any)
• Incomplete optimization: lots of code generated to define the simplest view
Tuesday, October 11, 2011
![Page 47: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/47.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Thank you!
snipe bookChas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
![Page 48: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/48.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Thank you!•CouchDB: http://couchdb.apache.org
snipe bookChas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
![Page 49: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/49.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Thank you!•CouchDB: http://couchdb.apache.org
•Clutch: http://github.com/ashafa/clutch
snipe bookChas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
![Page 50: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/50.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Thank you!•CouchDB: http://couchdb.apache.org
•Clutch: http://github.com/ashafa/clutch
•ClojureScript: https://github.com/clojure/
clojurescript
snipe bookChas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
![Page 51: Writing CouchDB Views using ClojureScript](https://reader033.vdocuments.us/reader033/viewer/2022052618/554a07aab4c905557a8b56c2/html5/thumbnails/51.jpg)
Chas Emerick: Writing CouchDB Views using ClojureScript
Thank you!•CouchDB: http://couchdb.apache.org
•Clutch: http://github.com/ashafa/clutch
•ClojureScript: https://github.com/clojure/
clojurescript
•Clutch-ClojureScript: http://github.com/
cemerick/clutch-clojurescript
snipe bookChas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011