Apache CouchDB
Relax
Hello • J Chris Anderson • Apache CouchDB committer • Web programmer (Rails, Ajax, etc) • Director, couch.io
About You? • Web developers are easy • Scalable key/value store • Peer-based Replication • Append-only IO pattern
Scaling Up • Hot. Literally. • You don’t have to think.
X Scaling Up • Hot. Literally. • You don’t have to think.
Scale Enforces Constraints • Distributed key / value stores • Context is expensive • No joins or autoincrement • Eventual consistency
e Web Scales
Why CouchDB? Native to the Web Scale from a cluster to a smartphone Local data == low latency Replicated applications - the p2p web
Of the Web Let me tell you something: Django may be built for the Web, but CouchDB is built of the Web. I've never seen software that so completely embraces the philosophies behind HTTP. ... this is what the software of the future looks like. Jacob Kaplan-Moss October 19, 2007 http://jacobian.org/writing/of-the-web/
JSON HTTP Local Robust
JSON Documents { "_id": "BCCD12CBB", Schema Free "_rev": "1-AB764C", "type": "person", "name": "Darth Vader", Self-Contained "age": 63, "headware": ["Helmet", "Sombrero"], JavaScript Map } "dark_side": true Reduce Views
Map Reduce Views Docs { “user” : “Chris”, Map { “key” : “Alice”, “value” : 5 } “points” : 3 } { “key” : “Bob”, “value” : 7 } { “user” : “Joe”, function(doc) { { “key” : “Chris”, “value” : 3 } “points” : 10 } if (doc.user && doc.points) { { “key” : “Joe”, “value” : 10 } { “user” : “Alice”, emit(doc.user, doc.points); { “key” : “Mary”, “value” : 9 } “points” : 5 } } { “user” : “Mary”, } “points” : 9 } { “user” : “Bob”, Reduce “points” : 7 } Alice ... Chris: 15 function(keys, values, rereduce) { Everyone: 34 return sum(values); }
JavaScript Map Reduce
ful  You already know the API Use existing HTTP tools Talk directly to the browser
ful  CRUD • Create HTTP PUT /db/mydocid • Read HTTP GET /db/mydocid • Update HTTP PUT /db/mydocid • Delete HTTP DELETE /db/mydocid
Local Data Low latency (fast) Peer-based incremental replication View source --> Open source
Gives Control to Users CC-BY-SA http://www.flickr.com/photos/kelleys/492253912/
Robust Storage Append Only File Structure Designed to Crash Instant-On
Happy IO Patterns
Bandwidth Explosion
“no bars”
http://www.flickr.com/photos/hercwad/2290378571/
http://www.flickr.com/photos/mcpig/872293700/
Latency Sucks
Scaling Down 4 MB RAM
Erlang Parallel Fault tolerant Addictive Ninja Syntax http://www.sics.se/~joe/apachevsyaws.html
Browser Couch JavaScript port Uses HTML5 storage Replicates with CouchDB http://hg.toolness.com/browser-couch/
No SQL in HTML5
Incremental Replication
curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://couch.example.com:5984/remote-db", "target":"local-db"}'
curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://couch.example.com:5984/remote-db", "target":"local-db"}'
Document Oriented Not Relational • Documents in the Real World™ • Bills, letters, tax forms… • Same type != same structure • Self contained • Can be out of date (so what?) • No references
Document Oriented Not Relational • Documents in the Real World™ Bills, letters, tax forms… Natural Data • • Same type != same structure • Behaviour Can be out of date (so what?) • No references
Render JSON Docs as HTML shows/post.js /drl/_design/sofa/_show/post/Hello-World-For-Real-This-Time
Render Views as HTML lists/index.js /drl/_list/sofa/index/recent-posts?descending=true&limit=8
Resources @CouchDB http://couchdb.apache.org/ Dress like a Couch: http://shop.couchdb.com http://planet.couchdb.org/ https://peepcode.com/products/couchdb-with-rails
@couchdbinaction http://books.couchdb.org/relax
couch.io Berlin – London – Portland
anks!
CC-by-nd http://www.flic.kr/photos/eifelyeti110/273939759/

CouchDB Open Source Bridge