73
CouchDB Apache

CouchDB Open Source Bridge

Embed Size (px)

Citation preview

Page 1: CouchDB Open Source Bridge

CouchDBApache

Page 2: CouchDB Open Source Bridge

Relax

Page 3: CouchDB Open Source Bridge

Hello

• J Chris Anderson

• Apache CouchDB committer

• Web programmer (Rails, Ajax, etc)• Director, couch.io

Page 4: CouchDB Open Source Bridge

About You?• Web developers are easy

• Scalable key/value store

• Peer-based Replication

• Append-only IO pattern

Page 5: CouchDB Open Source Bridge

Scaling Up

• Hot. Literally.

• You don’t have to think.

Page 6: CouchDB Open Source Bridge

Scaling Up

• Hot. Literally.

• You don’t have to think.X

Page 7: CouchDB Open Source Bridge

Scale Enforces Constraints• Distributed key / value stores

• Context is expensive

• No joins or autoincrement

• Eventual consistency

Page 8: CouchDB Open Source Bridge

e Web Scales

Page 9: CouchDB Open Source Bridge

Why CouchDB?Native to the Web

Scale from a cluster to a smartphone

Local data == low latency

Replicated applications - the p2p web

Page 10: CouchDB Open Source Bridge

Of the WebLet 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.

http://jacobian.org/writing/of-the-web/Jacob Kaplan-MossOctober 19, 2007

Page 11: CouchDB Open Source Bridge

JSON

HTTP

Local

Robust

Page 12: CouchDB Open Source Bridge

JSON Documents

{ "_id": "BCCD12CBB", "_rev": "1-AB764C",

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

Schema Free

Self-Contained

JavaScript Map Reduce Views

Page 13: CouchDB Open Source Bridge

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 14: CouchDB Open Source Bridge

JavaScript Map Reduce

Page 15: CouchDB Open Source Bridge
Page 16: CouchDB Open Source Bridge

You already know the API

Use existing HTTP tools

Talk directly to the browser

ful

Page 17: CouchDB Open Source Bridge

ful • Create

HTTP PUT /db/mydocid

• ReadHTTP GET /db/mydocid

• UpdateHTTP PUT /db/mydocid

• DeleteHTTP DELETE /db/mydocid

CRUD

Page 18: CouchDB Open Source Bridge

Local Data

Low latency (fast)

Peer-based incremental replication

View source --> Open source

Page 19: CouchDB Open Source Bridge

Gives Control to Users

CC-BY-SA http://www.flickr.com/photos/kelleys/492253912/

Page 20: CouchDB Open Source Bridge

Robust Storage

Append Only File Structure

Designed to Crash

Instant-On

Page 21: CouchDB Open Source Bridge

Happy IO Patterns

Page 22: CouchDB Open Source Bridge

Bandwidth Explosion

Page 23: CouchDB Open Source Bridge
Page 24: CouchDB Open Source Bridge
Page 25: CouchDB Open Source Bridge
Page 26: CouchDB Open Source Bridge
Page 27: CouchDB Open Source Bridge
Page 28: CouchDB Open Source Bridge
Page 29: CouchDB Open Source Bridge

“no bars”

Page 31: CouchDB Open Source Bridge
Page 33: CouchDB Open Source Bridge

Latency Sucks

Page 34: CouchDB Open Source Bridge

Scaling Down4 MB RAM

Page 35: CouchDB Open Source Bridge

ErlangParallel

Fault tolerant

Addictive

Ninja Syntaxhttp://www.sics.se/~joe/apachevsyaws.html

Page 36: CouchDB Open Source Bridge

Browser CouchJavaScript port

Uses HTML5 storage

Replicates with CouchDB

http://hg.toolness.com/browser-couch/

Page 37: CouchDB Open Source Bridge

No SQLin

HTML5

Page 38: CouchDB Open Source Bridge

Incremental Replication

Page 39: CouchDB Open Source Bridge

curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://couch.example.com:5984/remote-db",

"target":"local-db"}'

Page 40: CouchDB Open Source Bridge

curl -X POST http://127.0.0.1:5984/_replicate -d '{"source":"http://couch.example.com:5984/remote-db",

"target":"local-db"}'

Page 41: CouchDB Open Source Bridge
Page 42: CouchDB Open Source Bridge
Page 43: CouchDB Open Source Bridge
Page 44: CouchDB Open Source Bridge
Page 45: CouchDB Open Source Bridge
Page 46: CouchDB Open Source Bridge
Page 47: CouchDB Open Source Bridge
Page 48: CouchDB Open Source Bridge
Page 49: CouchDB Open Source Bridge
Page 50: CouchDB Open Source Bridge
Page 51: CouchDB Open Source Bridge
Page 52: CouchDB Open Source Bridge

Document Oriented• Documents in the Real World™

• Bills, letters, tax forms…

• Same type != same structure

• Self contained

• Can be out of date (so what?)

• No references

Not Relational

Page 53: CouchDB Open Source Bridge

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 54: CouchDB Open Source Bridge
Page 55: CouchDB Open Source Bridge
Page 56: CouchDB Open Source Bridge
Page 57: CouchDB Open Source Bridge
Page 58: CouchDB Open Source Bridge

Render JSON Docs as HTMLshows/post.js /drl/_design/sofa/_show/post/Hello-World-For-Real-This-Time

Page 59: CouchDB Open Source Bridge
Page 60: CouchDB Open Source Bridge

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

Page 61: CouchDB Open Source Bridge
Page 62: CouchDB Open Source Bridge
Page 63: CouchDB Open Source Bridge
Page 64: CouchDB Open Source Bridge
Page 65: CouchDB Open Source Bridge
Page 66: CouchDB Open Source Bridge
Page 67: CouchDB Open Source Bridge
Page 68: CouchDB Open Source Bridge
Page 69: CouchDB Open Source Bridge

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

Page 70: CouchDB Open Source Bridge

http://books.couchdb.org/relax

@couchdbinaction

Page 71: CouchDB Open Source Bridge

couch.ioBerlin – London – Portland

Page 72: CouchDB Open Source Bridge

anks!