CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris...

49
CouchDB Apache Friday, 27 March 2009

Transcript of CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris...

Page 1: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

CouchDBApache

Friday, 27 March 2009

Page 2: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

RelaxFriday, 27 March 2009

Page 3: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Who’s Talking?

• J Chris Anderson / [email protected] / @jchris

• PHP -> Rails -> JSON -> CouchDB

• Jan Lehnardt

• CouchDB early contributor• Directors, couch.io

Friday, 27 March 2009

Page 4: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

And You?

• Scalable Key Value Storage

• Good Fit For Web Development

• Triggered Replication

• High-Throughput Applications

Friday, 27 March 2009

Page 5: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Damien KatzWassat?

Friday, 27 March 2009

Page 6: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

CouchDB 0.9

Friday, 27 March 2009

Page 7: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 8: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 9: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

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

Friday, 27 March 2009

Page 10: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

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

Friday, 27 March 2009

Page 11: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

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

Friday, 27 March 2009

Page 12: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

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

Friday, 27 March 2009

Page 13: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 14: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

Friday, 27 March 2009

Page 15: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

Friday, 27 March 2009

Page 16: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Document OrientedNot Relational

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)

Friday, 27 March 2009

Page 17: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 18: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly ConcurrentNumber Bragging

Friday, 27 March 2009

Page 19: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly Concurrent

• Silly read-only benchmark with memory saturation

Number Bragging

Friday, 27 March 2009

Page 20: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly Concurrent

• Silly read-only benchmark with memory saturation

• 2,500 req/s sustained on a 2Ghz dual core 64-bit Athlon

Number Bragging

Friday, 27 March 2009

Page 21: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly Concurrent

• Silly read-only benchmark with memory saturation

• 2,500 req/s sustained on a 2Ghz dual core 64-bit Athlon

• Using 9.8 MB RAM

Number Bragging

Friday, 27 March 2009

Page 22: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly ConcurrentErlang Praising

Friday, 27 March 2009

Page 23: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly Concurrent• Erlang is worth its own talk

Erlang Praising

Friday, 27 March 2009

Page 24: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly Concurrent• Erlang is worth its own talk

• Executive Summary

Erlang Praising

Friday, 27 March 2009

Page 25: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Highly Concurrent• Erlang is worth its own talk

• Executive Summary

It’s fucking awesome!

Erlang Praising

Friday, 27 March 2009

Page 26: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 27: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

ful • Create

HTTP PUT /db/mydocid

• ReadHTTP GET /db/mydocid

• UpdateHTTP PUT /db/mydocid

• DeleteHTTP DELETE /db/mydocid

CRUD

Friday, 27 March 2009

Page 28: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 29: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

JavaScript powered Map/Reduce

• Map functions extract data from your documents

• Reduce functions aggregate intermediate values *yawn*.

• The kicker: Incremental b-tree storage.

Friday, 27 March 2009

Page 30: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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);}

Friday, 27 March 2009

Page 31: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 32: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 33: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 34: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 35: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 36: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 37: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 38: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 39: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 40: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 41: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009

Page 42: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

Friday, 27 March 2009

Page 43: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

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

Friday, 27 March 2009

Page 44: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Features• Schema Free (JSON)

• Document Oriented, Not Relational

• Highly Concurrent

• RESTful HTTP API

• JavaScript Powered Map/Reduce

• N-Master Replication

• Robust Storage

Friday, 27 March 2009

Page 45: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Robust Storage

Append Only

Resilient Replication

Full fsync()

Friday, 27 March 2009

Page 46: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Resources• Twitter: @CouchDB & http://couchdb.org/

• Dress like a Couch:http://shop.couchdb.com

• http://planet.couchdb.org/

• http://books.couchdb.org/relax/

• https://peepcode.com/products/couchdb-with-rails

Friday, 27 March 2009

Page 47: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

couch.ioBerlin – London – Portland

Friday, 27 March 2009

Page 48: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

anks!Friday, 27 March 2009

Page 49: CouchDB Apachearchive.apachecon.com/.../CouchDB-Intro-EU.pdf · Who’s Talking? • J Chris Anderson / jchris@apache.org / @jchris • PHP -> Rails -> JSON -> CouchDB • Jan Lehnardt

Friday, 27 March 2009