Couchdb Nosql

74
CouchDB Apache

Transcript of Couchdb Nosql

Page 1: Couchdb Nosql

CouchDBApache

Page 2: Couchdb Nosql

Relax

Page 3: Couchdb Nosql

Hello

• J Chris Anderson

• Apache CouchDB committer

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

Page 4: Couchdb Nosql

About You?

• Web developers are easy

• Scalable key/value store

• Peer-based Replication

• Append-only IO pattern

Page 5: Couchdb Nosql

Scaling Up

• Hot. Literally.

• You don’t have to think.

Page 6: Couchdb Nosql

Scaling Up

• Hot. Literally.

• You don’t have to think.X

Page 7: Couchdb Nosql

Scale Enforces Constraints• Distributed key / value stores

• Context is expensive

• No joins or autoincrement

• Eventual consistency

Page 8: Couchdb Nosql

e Web Scales

Page 9: Couchdb Nosql

Why CouchDB?Native to the Web

Local data == low latency

Replicated applications

Scale from a cluster to a smartphone

Page 10: Couchdb Nosql

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 Nosql

Robust

JSON

HTTP

Local

Page 12: Couchdb Nosql

Robust Storage

Append Only File Structure

Designed to Crash

Instant-On

Page 13: Couchdb Nosql

Happy IO Patterns

Page 14: Couchdb Nosql

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 15: Couchdb Nosql

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 16: Couchdb Nosql

JavaScript Map Reduce

Page 17: Couchdb Nosql
Page 18: Couchdb Nosql

You already know the API

Use existing HTTP tools

Talk directly to the browser

ful

Page 19: Couchdb Nosql

ful • Create

HTTP PUT /db/mydocid

• ReadHTTP GET /db/mydocid

• UpdateHTTP PUT /db/mydocid

• DeleteHTTP DELETE /db/mydocid

CRUD

Page 20: Couchdb Nosql

Clustering w/CouchDB-Lounge

Partitioning / clustering proxy

Nginx module

Twisted Python query merge

Makes many machines into one Couch

Page 21: Couchdb Nosql

Local Data

Low latency (fast)

Peer-based incremental replication

View source --> Open source

Page 22: Couchdb Nosql

Gives Control to Users

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

Page 23: Couchdb Nosql

Bandwidth Explosion

Page 24: Couchdb Nosql
Page 25: Couchdb Nosql
Page 26: Couchdb Nosql
Page 27: Couchdb Nosql
Page 28: Couchdb Nosql
Page 29: Couchdb Nosql
Page 30: Couchdb Nosql

“no bars”

Page 31: Couchdb Nosql

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

Page 32: Couchdb Nosql
Page 33: Couchdb Nosql

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

Page 34: Couchdb Nosql

Latency Sucks

Page 35: Couchdb Nosql

Scaling Down4 MB RAM

Page 36: Couchdb Nosql

ErlangParallel

Fault tolerant

Addictive

Ninja Syntax

Page 37: Couchdb Nosql

Browser CouchJavaScript port

Uses HTML5 storage

Replicates with CouchDB

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

Page 38: Couchdb Nosql

No SQLin

HTML5

Page 39: Couchdb Nosql

Incremental Replication

Page 40: Couchdb Nosql
Page 41: Couchdb Nosql
Page 42: Couchdb Nosql
Page 43: Couchdb Nosql
Page 44: Couchdb Nosql
Page 45: Couchdb Nosql
Page 46: Couchdb Nosql
Page 47: Couchdb Nosql
Page 48: Couchdb Nosql
Page 49: Couchdb Nosql
Page 50: Couchdb Nosql
Page 51: Couchdb Nosql
Page 52: Couchdb Nosql
Page 53: Couchdb Nosql
Page 54: Couchdb Nosql

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 55: Couchdb Nosql

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 56: Couchdb Nosql
Page 57: Couchdb Nosql
Page 58: Couchdb Nosql
Page 59: Couchdb Nosql

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

Page 60: Couchdb Nosql
Page 61: Couchdb Nosql

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

Page 62: Couchdb Nosql
Page 63: Couchdb Nosql
Page 64: Couchdb Nosql
Page 65: Couchdb Nosql
Page 66: Couchdb Nosql
Page 67: Couchdb Nosql
Page 68: Couchdb Nosql
Page 69: Couchdb Nosql
Page 70: Couchdb Nosql

anks!

Page 71: Couchdb Nosql

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 72: Couchdb Nosql

http://books.couchdb.org/relax

@couchdbinaction

Page 73: Couchdb Nosql

couch.ioBerlin – London – Portland

Page 74: Couchdb Nosql

CC-by-nd http://www.flic.kr/photos/eifelyeti110/273939759/