writing couchdb views using clojurescript
Post on 06-May-2015
6.438 Views
Preview:
DESCRIPTION
TRANSCRIPT
Writing CouchDB Views using
ClojureScript
Chas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerick
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
@cemerickFounded Snowtide in 2001
Clojure full-time since 2008
Tuesday, October 11, 2011
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
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
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
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
CouchDB in 1 minute• Document-oriented data store
• (Primary) key => JSON object
Tuesday, October 11, 2011
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
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
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
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
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
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
• CouchDB library for Clojure
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch
• CouchDB library for Clojure
• (Javascript) view creation and querying support:
Tuesday, October 11, 2011
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
Chas Emerick: Writing CouchDB Views using ClojureScript
“Javascript sucks”
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
“Javascript sucks”
Q.E.D.
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
Clutch: Clojure view server
• Use Clojure to write view functions:
Tuesday, October 11, 2011
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
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
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
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
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
• Clojure : JVM :: ClojureScript : JavaScript
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
ClojureScript
• Clojure : JVM :: ClojureScript : JavaScript
• Ahead-of-time compilation (no eval)
Tuesday, October 11, 2011
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
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
Chas Emerick: Writing CouchDB Views using ClojureScript
Demo
Tuesday, October 11, 2011
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
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
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
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
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
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
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
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
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
Tuesday, October 11, 2011
Chas Emerick: Writing CouchDB Views using ClojureScript
Current issues
• ClojureScript is not a library (yet!)
Tuesday, October 11, 2011
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
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
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
Chas Emerick: Writing CouchDB Views using ClojureScript
Thank you!
snipe bookChas Emerick
@cemerick http://cemerick.comhttp://snowtide.com
Tuesday, October 11, 2011
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
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
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
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
top related