Advanced CouchDB Rotterdam.rb July 2010

83
CouchDB relax

description

CouchDB talk about it's potential, it's unique features, how map/reduce works (simplified) and just how awesome CouchDB really is. Rock on!

Transcript of Advanced CouchDB Rotterdam.rb July 2010

Page 1: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

Page 2: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

Sander van de Graafsvdgraaf

Page 3: Advanced CouchDB Rotterdam.rb July 2010

RELAX...

Page 4: Advanced CouchDB Rotterdam.rb July 2010

PERFORM LIKE A PR0N STAR

Page 5: Advanced CouchDB Rotterdam.rb July 2010

TOPICS

•NoSQL

• CouchDB in a nutshell

•Querying

•map/reduce

• Fulltext search

• CouchApps

Page 6: Advanced CouchDB Rotterdam.rb July 2010

NOSQL

Page 7: Advanced CouchDB Rotterdam.rb July 2010

IT’S A MOVEMENT

Page 8: Advanced CouchDB Rotterdam.rb July 2010

1998

Page 9: Advanced CouchDB Rotterdam.rb July 2010
Page 10: Advanced CouchDB Rotterdam.rb July 2010
Page 11: Advanced CouchDB Rotterdam.rb July 2010
Page 12: Advanced CouchDB Rotterdam.rb July 2010
Page 13: Advanced CouchDB Rotterdam.rb July 2010
Page 14: Advanced CouchDB Rotterdam.rb July 2010
Page 15: Advanced CouchDB Rotterdam.rb July 2010
Page 16: Advanced CouchDB Rotterdam.rb July 2010
Page 17: Advanced CouchDB Rotterdam.rb July 2010

Carlo Strozzi

Page 18: Advanced CouchDB Rotterdam.rb July 2010

NOSQL == Not Only SQL

Page 19: Advanced CouchDB Rotterdam.rb July 2010

“[The NoSQL movement] departs from the relational model altogether, it should therefore have been called more appropriately ‘NoREL’, or something to that effect.”

- Carlo Strozzi

Page 20: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

Page 21: Advanced CouchDB Rotterdam.rb July 2010
Page 22: Advanced CouchDB Rotterdam.rb July 2010
Page 23: Advanced CouchDB Rotterdam.rb July 2010
Page 24: Advanced CouchDB Rotterdam.rb July 2010
Page 25: Advanced CouchDB Rotterdam.rb July 2010
Page 26: Advanced CouchDB Rotterdam.rb July 2010

NUTSHELL

Page 27: Advanced CouchDB Rotterdam.rb July 2010

SPEED

Page 28: Advanced CouchDB Rotterdam.rb July 2010

APPEND ONLY

Page 29: Advanced CouchDB Rotterdam.rb July 2010

NO REPAIR NEEDED

Page 30: Advanced CouchDB Rotterdam.rb July 2010

COMPACTING

Page 31: Advanced CouchDB Rotterdam.rb July 2010

HTTP SERVER

Page 32: Advanced CouchDB Rotterdam.rb July 2010

CAP

Page 33: Advanced CouchDB Rotterdam.rb July 2010

CAP

CouchDB

Page 34: Advanced CouchDB Rotterdam.rb July 2010

EVENTUALLY CONSISTENT

CouchDB

Page 35: Advanced CouchDB Rotterdam.rb July 2010

FULL REST API

Page 36: Advanced CouchDB Rotterdam.rb July 2010

REST

• GET

• PUT

• POST

•DELETE

• COPY

• SELECT

• UPDATE

• INSERT

•DELETE

• ...

Page 37: Advanced CouchDB Rotterdam.rb July 2010
Page 38: Advanced CouchDB Rotterdam.rb July 2010

JSON{ total_rows: 2, offset: 0, rows: [ { id: '_design/foobar', key: '_design/foobar', value: { rev: '5-982b2fc36835715b2aae54609b5d5f1e' } }, { id: 'f0e1fd96eb6e094f74dda8d949000a6a', key: 'f0e1fd96eb6e094f74dda8d949000a6a', value: { rev: '1-86bca407fce8234a63c90ff549b56b10' } }, ]}

Page 39: Advanced CouchDB Rotterdam.rb July 2010

REPLICATION

Page 40: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

Page 41: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

Page 42: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 43: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

Page 44: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 45: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

CouchDBrelax

US NL

Page 46: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

CouchDBrelax

Laptop Desktop

Phone

Page 47: Advanced CouchDB Rotterdam.rb July 2010

P2P WEB

Page 48: Advanced CouchDB Rotterdam.rb July 2010
Page 49: Advanced CouchDB Rotterdam.rb July 2010
Page 50: Advanced CouchDB Rotterdam.rb July 2010
Page 51: Advanced CouchDB Rotterdam.rb July 2010

QUERYING

Page 52: Advanced CouchDB Rotterdam.rb July 2010

GET /documents/123

SELECT * FROM documents WHERE id = 123

Page 53: Advanced CouchDB Rotterdam.rb July 2010

GET /documents/123PUT /documents/123POST /documents/123DELETE /documents/123

etc.

SELECT * FROM documents WHERE id = 123

Page 54: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

Page 55: Advanced CouchDB Rotterdam.rb July 2010
Page 56: Advanced CouchDB Rotterdam.rb July 2010

INPUT

IP Bytes

212.122.174.13 18271

212.122.174.13 191726

212.122.174.13 198

74.119.8.111 91272

74.119.8.111 8371

212.122.174.13 43

Page 57: Advanced CouchDB Rotterdam.rb July 2010

MAPPER => REDUCER

IP Bytes

212.122.174.13

18271

212.122.174.13191726

212.122.174.13198

212.122.174.13

43

74.119.8.11191272

74.119.8.1118371

Page 58: Advanced CouchDB Rotterdam.rb July 2010

AFTER REDUCE

IP Bytes

212.122.174.13 210238

74.119.8.111 99643

Page 59: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

SELECT COUNT(foo)FROM documentsWHERE 1GROUP BY foo;

Page 60: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

Page 61: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

function(doc) { emit(doc.foo, doc);}

Page 62: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

Page 63: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

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

Page 64: Advanced CouchDB Rotterdam.rb July 2010

MAP/REDUCE

Page 65: Advanced CouchDB Rotterdam.rb July 2010

COUCHDB-LUCENEhttp://github.com/rnewson/couchdb-lucene

Page 66: Advanced CouchDB Rotterdam.rb July 2010

CONFIG[external]fti=/path/to/python /path/to/couchdb-lucene/tools/couchdb-external-hook.py

[httpd_db_handlers]_fti = {couch_httpd_external, handle_external_req, <<"fti">>}

Page 67: Advanced CouchDB Rotterdam.rb July 2010

http://127.0.0.1:5984> GET /foobar/_design/foobar

Page 68: Advanced CouchDB Rotterdam.rb July 2010

_DESIGN

{ _id: '_design/foobar', _rev: '8-03a6bc983c721b1cc0ae4b461326bc31', language: 'javascript', views: { foo: { map: 'function(doc) {\n emit(doc.foo,1);\n}', reduce: 'function(keys, values, rereduce) {return sum(values);}' } }}

Page 69: Advanced CouchDB Rotterdam.rb July 2010

_DESIGN

{ _id: '_design/foobar', _rev: '8-03a6bc983c721b1cc0ae4b461326bc31', language: 'javascript', views: { foo: { map: 'function(doc) {\n emit(doc.foo,1);\n}', reduce: 'function(keys, values, rereduce) {return sum(values);}' } }, fulltext: { by_subject: { index:"function(doc) { var ret=new Document(); ret.add(doc.subject); return ret }" }, }}

Page 70: Advanced CouchDB Rotterdam.rb July 2010

_DESIGN

function(doc) { var ret=new Document(); ret.add(doc.subject); return ret}

Page 71: Advanced CouchDB Rotterdam.rb July 2010

_DESIGN

function(doc) { var result = new Document(); result.add(doc.subject, {"field":"subject", "store":"yes"}); result.add(doc.content, {"field":"subject"}); result.add(new Date(), {"field":"indexed_at"}); return result;}

Page 72: Advanced CouchDB Rotterdam.rb July 2010

http://127.0.0.1:5984> GET /foobar/_fti/_design/foo/by_subject?q=foobar

Page 73: Advanced CouchDB Rotterdam.rb July 2010

http://127.0.0.1:5984> GET /foobar/_fti/_design/foo/by_subject?q=foobar

Page 74: Advanced CouchDB Rotterdam.rb July 2010

COUCHAPPShttp://github.com/couchapp/couchapp

Page 75: Advanced CouchDB Rotterdam.rb July 2010

“Distributed, scalable, web applications you say?

omgwtfbbq!?!1!!!11!1!eleven”

Page 76: Advanced CouchDB Rotterdam.rb July 2010

_attachments

Page 77: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 78: Advanced CouchDB Rotterdam.rb July 2010

COUCHAPP PUSH HTTP://LOCALHOST:5984/MYDB

Page 79: Advanced CouchDB Rotterdam.rb July 2010

LISTS

http://127.0.0.1:5984> GET /relax/_design/relax/_list/posts/all/foobarHTTP/1.1 200 OKVary: AcceptTransfer-Encoding: chunkedServer: CouchDB/0.11.0 (Erlang OTP/R13B)Etag: "DZZ19EPLWLHI89K1FOW9DGFT5"Date: Sun, 11 Jul 2010 09:55:42 GMTContent-Type: text/html

<h1>ponies</h1><p>rock!</p>

Page 80: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

Page 81: Advanced CouchDB Rotterdam.rb July 2010

CouchDBrelax

Page 82: Advanced CouchDB Rotterdam.rb July 2010

COUCHDBXhttp://janl.github.com/couchdbx/

Page 83: Advanced CouchDB Rotterdam.rb July 2010

Q?