Rotterdam.php CouchDB

90
CouchDB relax

description

 

Transcript of Rotterdam.php CouchDB

Page 1: Rotterdam.php CouchDB

CouchDBrelax

Page 2: Rotterdam.php CouchDB

CouchDBrelax

Sander van de Graafsvdgraaf

Page 3: Rotterdam.php CouchDB

RELAX...

Page 4: Rotterdam.php CouchDB

PERFORM LIKE A PR0N STAR

Page 5: Rotterdam.php CouchDB

TOPICS

•NoSQL

• CouchDB in a nutshell

•Querying

•map/reduce

• Fulltext search

• CouchApps

Page 6: Rotterdam.php CouchDB

NOSQL

Page 7: Rotterdam.php CouchDB

IT’S A MOVEMENT

Page 8: Rotterdam.php CouchDB

1998

Page 9: Rotterdam.php CouchDB
Page 10: Rotterdam.php CouchDB
Page 11: Rotterdam.php CouchDB
Page 12: Rotterdam.php CouchDB
Page 13: Rotterdam.php CouchDB
Page 14: Rotterdam.php CouchDB
Page 15: Rotterdam.php CouchDB
Page 16: Rotterdam.php CouchDB
Page 17: Rotterdam.php CouchDB

Carlo Strozzi

Page 18: Rotterdam.php CouchDB

NOSQL == Not Only SQL

Page 19: Rotterdam.php CouchDB

“[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: Rotterdam.php CouchDB

LANDSCAPE

Page 21: Rotterdam.php CouchDB

DISTRIBUTED VS NON-DISTRIBUTED

Distributed Non distributedAmazon Dynamo Redis

Amazon S3 Tokyo Tyrant

Scalaris MemcacheDb

CouchDB Amazon SimpleDb

Voldemort

Riak

MongoDb

BigTable

Cassandra

HyperTable

HBase

source: Vineet Gupta http://bit.ly/5kuQgB

Page 22: Rotterdam.php CouchDB

DATAMODEL STORAGE

Key/Value Document Column

Amazon Dynamo Amazon SimpleDb Cassandra

Amazon S3 CouchDB Google BigTable

Redis MongoDb HBase

Scalaris Riak Hyperbase

Voldemort

Page 23: Rotterdam.php CouchDB

STORAGE

Memory Configurable Disk

Scalaris BigTable CouchDB

Redis Cassandra MongoDb

Hbase Riak

HyperTable Voldemort

Page 24: Rotterdam.php CouchDB

CouchDBrelax

Page 25: Rotterdam.php CouchDB
Page 26: Rotterdam.php CouchDB
Page 27: Rotterdam.php CouchDB
Page 28: Rotterdam.php CouchDB
Page 29: Rotterdam.php CouchDB
Page 30: Rotterdam.php CouchDB

JAVASCRIPT

Page 31: Rotterdam.php CouchDB

NUTSHELL

Page 32: Rotterdam.php CouchDB

SPEED

Page 33: Rotterdam.php CouchDB

APPEND ONLY

Page 34: Rotterdam.php CouchDB

NO REPAIR NEEDED

Page 35: Rotterdam.php CouchDB

COMPACTING

Page 36: Rotterdam.php CouchDB

HTTP SERVER

Page 37: Rotterdam.php CouchDB

CAP

Page 38: Rotterdam.php CouchDB

CAP

CouchDB

Page 39: Rotterdam.php CouchDB

EVENTUALLY CONSISTENT

CouchDB

Page 40: Rotterdam.php CouchDB

ALLTHINGSDISTRIBUTED.COM

Page 41: Rotterdam.php CouchDB

FULL REST API

Page 42: Rotterdam.php CouchDB

REST

• GET

• PUT

• POST

•DELETE

• COPY

• SELECT

• UPDATE

• INSERT

•DELETE

• ...

Page 43: Rotterdam.php CouchDB
Page 44: Rotterdam.php CouchDB

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 45: Rotterdam.php CouchDB

REPLICATION

Page 46: Rotterdam.php CouchDB

CouchDBrelax

Page 47: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

Page 48: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 49: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

Page 50: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 51: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

Laptop Desktop

Phone

Page 52: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

US NL

Page 53: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

IDG US IDG AUSTRALIA

CouchDBrelax

CouchDBrelax

IDG NL IDG DE

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 54: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

IDG US IDG Australia

CouchDBrelax

CouchDBrelax

IDG NL IDG UK

CouchDBrelax

CouchDBrelax CouchDB

relax

CouchDBrelax

IDG Poland IDG Romania

IDG Spania IDG Portugal

IDG Germany IDG Brasil IDG Ghana IDG Hungary

IDG India IDG Thailand IDG Japan IDG Vietnam

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 55: Rotterdam.php CouchDB

P2P WEB

Page 56: Rotterdam.php CouchDB
Page 57: Rotterdam.php CouchDB
Page 58: Rotterdam.php CouchDB

QUERYING

Page 59: Rotterdam.php CouchDB

GET /documents/123

SELECT * FROM documents WHERE id = 123

Page 60: Rotterdam.php CouchDB

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

etc.

SELECT * FROM documents WHERE id = 123

Page 61: Rotterdam.php CouchDB

MAP/REDUCE

Page 62: Rotterdam.php CouchDB
Page 63: Rotterdam.php CouchDB

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 64: Rotterdam.php CouchDB

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 65: Rotterdam.php CouchDB

AFTER REDUCE

IP Bytes

212.122.174.13 210238

74.119.8.111 99643

Page 66: Rotterdam.php CouchDB

MAP/REDUCE

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

Page 67: Rotterdam.php CouchDB

MAP/REDUCE

Page 68: Rotterdam.php CouchDB

MAP/REDUCE

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

Page 69: Rotterdam.php CouchDB

MAP/REDUCE

Page 70: Rotterdam.php CouchDB

MAP/REDUCE

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

Page 71: Rotterdam.php CouchDB

MAP/REDUCE

Page 72: Rotterdam.php CouchDB

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

Page 73: Rotterdam.php CouchDB

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 74: Rotterdam.php CouchDB

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

Page 75: Rotterdam.php CouchDB

_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 76: Rotterdam.php CouchDB

_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 77: Rotterdam.php CouchDB

_DESIGN

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

Page 78: Rotterdam.php CouchDB

_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 79: Rotterdam.php CouchDB

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

Page 80: Rotterdam.php CouchDB

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

Page 81: Rotterdam.php CouchDB

COUCHAPPShttp://github.com/couchapp/couchapp

Page 82: Rotterdam.php CouchDB

“Distributed, scalable, web applications you say?

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

Page 83: Rotterdam.php CouchDB

_attachments

Page 84: Rotterdam.php CouchDB

CouchDBrelax

CouchDBrelax

CouchDBrelax

Page 85: Rotterdam.php CouchDB

COUCHAPP PUSH HTTP://LOCALHOST:5984/MYDB

Page 86: Rotterdam.php CouchDB

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 87: Rotterdam.php CouchDB

CouchDBrelax

Page 88: Rotterdam.php CouchDB

CouchDBrelax

Page 89: Rotterdam.php CouchDB

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

Page 90: Rotterdam.php CouchDB

Q?