Advanced CouchDB Rotterdam.rb July 2010
Upcoming SlideShare
Loading in...5
×
 

Advanced CouchDB Rotterdam.rb July 2010

on

  • 6,246 views

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

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

Statistics

Views

Total Views
6,246
Views on SlideShare
6,061
Embed Views
185

Actions

Likes
10
Downloads
130
Comments
0

3 Embeds 185

http://rotterdam-rb.org 158
http://www.slideshare.net 26
http://feeds.feedburner.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Advanced CouchDB Rotterdam.rb July 2010 Advanced CouchDB Rotterdam.rb July 2010 Presentation Transcript

  • CouchDB relax
  • CouchDB relax Sander van de Graaf svdgraaf
  • RELAX...
  • PERFORM LIKE A PR0N STAR
  • TOPICS • NoSQL • CouchDB in a nutshell • Querying • map/reduce • Fulltext search • CouchApps
  • NOSQL
  • IT’S A MOVEMENT
  • 1998
  • Carlo Strozzi
  • NOSQL == Not Only SQL
  • “[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
  • CouchDB relax
  • NUTSHELL
  • SPEED
  • APPEND ONLY
  • NO REPAIR NEEDED
  • COMPACTING
  • HTTP SERVER
  • CAP
  • CouchDB CAP
  • CouchDB EVENTUALLY CONSISTENT
  • FULL REST API
  • REST • GET • SELECT • PUT • UPDATE • POST • INSERT • DELETE • DELETE • COPY • ...
  • 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' } }, ] }
  • REPLICATION
  • CouchDB relax
  • CouchDB relax CouchDB relax
  • CouchDB relax CouchDB relax CouchDB relax CouchDB relax
  • CouchDB relax CouchDB relax
  • CouchDB relax CouchDB relax CouchDB relax
  • US NL CouchDB relax CouchDB relax CouchDB relax
  • Laptop Desktop CouchDB relax CouchDB relax Phone CouchDB relax
  • P2P WEB
  • QUERYING
  • SELECT * FROM documents WHERE id = 123 GET /documents/123
  • SELECT * FROM documents WHERE id = 123 GET /documents/123 PUT /documents/123 POST /documents/123 DELETE /documents/123 etc.
  • MAP/REDUCE
  • 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
  • MAPPER => REDUCER IP Bytes 18271 191726 212.122.174.13 198 43 91272 74.119.8.111 8371
  • AFTER REDUCE IP Bytes 212.122.174.13 210238 74.119.8.111 99643
  • MAP/REDUCE SELECT COUNT(foo) FROM documents WHERE 1 GROUP BY foo;
  • MAP/REDUCE
  • MAP/REDUCE function(doc) { emit(doc.foo, doc); }
  • MAP/REDUCE
  • MAP/REDUCE function(keys, values, rereduce) { return sum(values); }
  • MAP/REDUCE
  • COUCHDB-LUCENE http://github.com/rnewson/couchdb-lucene
  • 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">>}
  • http://127.0.0.1:5984> GET /foobar/_design/foobar
  • _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);}' } } }
  • _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 }" }, } }
  • _DESIGN function(doc) { var ret=new Document(); ret.add(doc.subject); return ret }
  • _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; }
  • http://127.0.0.1:5984> GET /foobar/_fti/_design/foo/by_subject?q=foobar
  • http://127.0.0.1:5984> GET /foobar/_fti/_design/foo/by_subject?q=foobar
  • COUCHAPPS http://github.com/couchapp/couchapp
  • “Distributed, scalable, web applications you say? omgwtfbbq!?!1!!!11!1!eleven”
  • _attachments
  • CouchDB relax CouchDB relax CouchDB relax
  • COUCHAPP PUSH HTTP://LOCALHOST:5984/MYDB
  • LISTS http://127.0.0.1:5984> GET /relax/_design/relax/_list/posts/all/foobar HTTP/1.1 200 OK Vary: Accept Transfer-Encoding: chunked Server: CouchDB/0.11.0 (Erlang OTP/R13B) Etag: "DZZ19EPLWLHI89K1FOW9DGFT5" Date: Sun, 11 Jul 2010 09:55:42 GMT Content-Type: text/html <h1>ponies</h1><p>rock!</p>
  • CouchDB relax
  • CouchDB relax
  • COUCHDBX http://janl.github.com/couchdbx/
  • Q?