CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason...

77
CouchDB Apache JAOO October 5th, 2009 Jason Davies

Transcript of CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason...

Page 1: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

CouchDBApache

JAOO October 5th, 2009

Jason Davies

Page 2: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

About Jason• Cambridge University (2002-2005)

• Director, Jason Davies Ltd (2005-present)

• Web Developer: Python, Django, JavaScript, jQuery, Erlang, &c.

• Apache CouchDB committer (2009)

Page 3: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

CouchDB from

3,333km

Page 4: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

CouchDB Features• “Cluster of Unreliable Commodity Hardware”

• Schema-free (JSON)

• Document-oriented, distributed database

• RESTful HTTP API

• JavaScript-powered Map/Reduce

• N-Master Replication

Page 5: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 6: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 7: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 8: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 9: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Documents

http://www.flickr.com/photos/stilleben2001/223243329/

Page 10: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Schema-Free ( JSON){ "_id": "BCCD12CBB", "_rev": "AB764C",

"type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true}

Page 11: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Schema-Free ( JSON){ "_id": "BCCD12CBB", "_rev": "AB764C",

"type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true}

Page 12: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Schema-Free ( JSON){ "_id": "BCCD12CBB", "_rev": "AB764C",

"type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true}

Page 13: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Schema-Free ( JSON){ "_id": "BCCD12CBB", "_rev": "AB764C",

"type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true}

Page 14: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document-Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 15: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Document-Oriented

• Documents in the Real World™

• Bills, letters, tax forms…

• Same type != same structure

• Can be out of date (so what?)

• No references

Not Relational

Page 16: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Document-Oriented• Documents in the Real World™

• Bills, letters, tax forms…

• Same type != same structure

• Can be out of date (so what?)

• No references

Not Relational

Natural Data Behaviour

Page 17: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document-Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 18: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 19: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 20: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Highly Concurrent

• Functional languages highly appropriate for parallellism

• Lightweight “processes” and message-passing; “shared-nothing”

• Easy to create fault-tolerant systems

Erlang FTW

Page 21: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

MVCC• Multiversion Concurrency Control

• Reads: lock-free; never block

• Potential for massive horizontal scaling

• Writes: all-or-nothing

• Success

• Fail: conflict error, fetch and try again

Page 22: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document-Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 23: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

!"#$ful %$$& '&(• Create

HTTP PUT /db/mydocid

• ReadHTTP GET /db/mydocid

• UpdateHTTP PUT /db/mydocid

• DeleteHTTP DELETE /db/mydocid

CRUD

Page 24: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

couch = CouchRest.database!("http://127.0.0.1:5984/tweets")

tweets_url = "http://twitter.com/statuses/user_timeline.json"

tweets = http.get(tweets_url)couch.bulk_save(tweets)

!"#$ful %$$& '&(Example

Page 25: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Cacheability• Both documents and views return ETags

• Clients send If-None-Match

• CouchDB responds with 304 Not Modified and bypasses potentially expensive lookup

• Can use Varnish/Squid as caching proxy

• Proxy- friendly

Page 26: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document-Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 27: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

JavaScript-Powered Map/Reduce

• Map functions extract data from your documents

• Reduce functions aggregate intermediate values

• The kicker: Incremental B-tree storage

Page 28: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

http://horicky.blogspot.com/2008/10/couchdb-implementation.html

Page 29: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Map/Reduce ViewsDocs

Map{"user" : "Chris",

"points" : 3 }{"user": "Joe","points" : 10 }

{"user": "Alice","points" : 5 }

{"user": "Mary","points" : 9}

{"user": "Bob","points": 7}

function(doc) {if (doc.user && doc.points) {

emit(doc.user, doc.points);}

}

{"key": "Alice", "value": 5}{"key": "Bob", "value": 7}

{"key": "Chris", "value": 3}{"key": "Joe", "value": 10}{"key": "Mary", "value": 9}

ReduceAlice ... Chris: 15

Everyone: 34function(keys, values, rereduce) { return sum(values);}

Page 30: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Map/Reduce ViewsDocs

Map{"user" : "Chris",

"points" : 3 }{"user": "Joe","points" : 10 }

{"user": "Alice","points" : 5 }

{"user": "Mary","points" : 9}

{"user": "Bob","points": 7}

function(doc) {if (doc.user && doc.points) {

emit(doc.user, doc.points);}

}

{"key": "Alice", "value": 5}{"key": "Bob", "value": 7}

{"key": "Chris", "value": 3}{"key": "Joe", "value": 10}{"key": "Mary", "value": 9}

ReduceAlice … Chris: 15

Everyone: 34function(keys, values, rereduce) { return sum(values);}

Page 31: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Map/Reduce ViewsDocs

Map{"user" : "Chris",

"points" : 3 }{"user": "Joe","points" : 10 }

{"user": "Alice","points" : 5 }

{"user": "Mary","points" : 9}

{"user": "Bob","points": 7}

function(doc) {if (doc.user && doc.points) {

emit(doc.user, doc.points);}

}

{"key": "Alice", "value": 5}{"key": "Bob", "value": 7}

{"key": "Chris", "value": 3}{"key": "Joe", "value": 10}{"key": "Mary", "value": 9}

ReduceAlice … Chris: 15

Everyone: 34function(keys, values, rereduce) { return sum(values);}

Page 32: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Render Views as HTMLlists/index.js /drl/_list/sofa/index/recent-posts?descending=true&limit=8

Page 33: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Server-Side JavaScript• _show for transforming documents

• _list for transforming views

• _update for transforming PUTs/POSTs

• Code-sharing between client and server

• Easy deployment

Page 34: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document-Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 35: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Replication• Incremental

• Near-real-time

• Clustered mirrors

• Scheduled

• Ad-hoc

Page 36: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

http://www.flickr.com/photos/mcpig/872293700/

“Ground Computing”@jhuggins

- local to the user, more like desktop web than like Gears - local http server - browser apps - same application on the client and server or the cloud

Page 37: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

http://www.flickr.com/photos/hercwad/2290378571/

Page 38: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Latency Sucks

speed of lightdrawback to cloud computing

Page 39: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

! !

Stuart Langridge - Canonical

Page 40: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 41: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 42: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 43: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 44: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 45: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 46: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 47: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 48: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 49: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Con)icts

Page 50: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Con)ict resolution by example

A B

Page 51: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

❦❦

Con)ict resolution by example

A B

Page 52: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Con)ict resolution by example

A B

❦ ✿♪

Page 53: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

✿♪

Con)ict resolution by example

A B

Page 54: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

✿♪

Con)ict resolution by example

A B

Page 55: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Features• Schema-Free (JSON)

• Document-Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript-Powered Map/Reduce

• N-Master Replication

• Robust Storage

Page 56: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Robust Storage

Append-Only File Structure

Designed to Crash

Instant-On

Page 57: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Robust

- when britain is burning - Enda Farrell - bbc

Page 58: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

No Silver Bullet!• Read-optimised; not so much for writes

• Use ?batch=ok for “don’t care” logging

• Views must be specified beforehand

• Relational databases are better at highly dynamic queries

• But: use externals e.g. Lucene, SQLite

Page 59: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Experiments!

http://www.flickr.com/photos/seanstayte/378461237/

Page 60: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

`couchapp`

• Scripts written in Python to make developing pure CouchDB applications easier

• sudo easy_install couchapp

• couchapp generate relax && cd relax

• couchapp push http://127.0.0.1:5984/mydb

Page 61: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Directory Structure

Page 62: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Resulting Design Doc

Page 63: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

_list• Arbitrary JS transformation for views

• http://127.0.0.1:5984/mydb/_design/app/_list/myview?startkey=...&endkey=...

• JSON -> HTML, JSON -> XML, ...

• E4X nice for XML generation

• Iteratively call getRow() and use send(...)

Page 64: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

_show

• Arbitrary transformation for documents

• http://127.0.0.1:5984/mydb/_design/app/_show/mydoc

• function (doc, req) { return “foo”; }

Page 65: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

JavaScript Templating

• EmbeddedJS (EJS)

• <% /* execute arbitrary JS */ %>

• <%= /* execute and include result */ %>

• new EJS({ text: mytemplate }).render(doc);

• John Resig’s Micro-Templating

• new template(mytemplate)(doc);

• Doesn’t preserve whitespace or LaTeX backslashes

Page 66: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Push Helper Macros

• Simple macros to facilitate code re-use

• Insert code directly

• // !code path/to/code.js

• Encode file as JSON: path/to/test.html

• // !json path.to.test

• // !json _attachments/test.html

Page 67: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Secure Cookie Authentication

• Reasonable performance/simplicity of JavaScript implementation

• Mutual authentication

• Resistance to off-line dictionary attacks based on passive eavesdropping

• Passwords stored in a form that is not plaintext-equivalent

• Limited resistance to replay attacks

Page 68: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 69: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Tamper-Proof Cookies

Timestamp + signature => limited forward-security (outside of timestamp window)

Page 70: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

Secure Remote Password Protocol (SRP)

• Zero-Knowledge Password Proof

• Simple to implement in Erlang using BigInt and crypto libraries

• JavaScript too slow: over 5s for 1024 bits

• Vulnerable to active injection attacks

• There are simpler protocols that can be used to give equivalent security

• Just add SSL for protection from active attacks (or lobby for TLS-SRP/J-PAKE!)

Page 71: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 72: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 73: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 74: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 75: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies
Page 76: CouchDB Apache - jaoo.dkjaoo.dk/dl/jaoo-aarhus-2009/slides/JasonDavies_CouchDBFrom3333km.pdfJason Davies. About Jason • Cambridge University (2002-2005) • Director, Jason Davies

http://books.couchdb.org/relax

@couchdbinaction