introduction to couchdb

19
Open Source Business Systems www.opusvl.com Introduction to CouchDB Jon Allen (JJ) – [email protected] YAPC::Europe 2010 Introduction to CouchDB

Upload: opusvl

Post on 28-Nov-2014

1.487 views

Category:

Technology


2 download

DESCRIPTION

Presented at the YAPC::Europe conference in Pisa, Italy

TRANSCRIPT

Page 1: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Introduction to CouchDB

Jon Allen (JJ) – [email protected]

YAPC::Europe 2010

Introduction to CouchDB

Page 2: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

What is CouchDB?

•  Document Oriented Database

Introduction to CouchDB

Page 3: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

What is CouchDB?

•  Document Oriented Database – No schema

•  Stores "documents" (i.e. data structures)

– No SQL •  Uses "MapReduce" queries written in JavaScript

Introduction to CouchDB

Page 4: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

What is CouchDB?

•  Document Oriented Database – No schema

•  Stores "documents" (i.e. data structures)

– No SQL •  Uses "MapReduce" queries written in JavaScript

•  Written in Erlang •  REST API •  Replication, scalability

Introduction to CouchDB

Page 5: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Why use CouchDB?

•  Store complex data structures (JSON) •  Store variable data structures (no schema) •  De-normalised / self contained •  Add attachments to documents •  Scalable and fault tolerant

•  Better fit for certain problem domains – Messaging – CMS

Introduction to CouchDB

Page 6: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Using CouchDB from Perl

•  HTTP REST API •  No DBI, DBD, DBIx::Class etc

•  CPAN modules – CouchDB::Client –  AnyEvent::CouchDB

Introduction to CouchDB

Page 7: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Creating a database

Introduction to CouchDB

use CouchDB::Client; use Try::Tiny;

my $client = CouchDB::Client->new( uri => 'http://localhost:5984' );

my $db = $client->newDB('jj_test'); # lower case!

try { $db->create; } catch { die "Could not create DB"; };

Page 8: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Inserting a document

Introduction to CouchDB

my $client = CouchDB::Client->new(); my $db = $client->newDB('jj_test');

my $doc = $db->newDoc('docid', undef, { type => 'message', text => 'Hello, World', to => ['JJ', 'Barbie', 'Brian'], });

try { $doc->create; } catch { die "Could not create document"; };

Page 9: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Inserting a document

Introduction to CouchDB

my $client = CouchDB::Client->new(); my $db = $client->newDB('jj_test');

my $doc = $db->newDoc('docid', undef, { type => 'message', text => 'Hello, World', to => ['JJ', 'Barbie', 'Brian'], });

try { $doc->create; } catch { die "Could not create document"; };

Document ID, must be unique

Revision ID

Page 10: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

CouchDB GUI

Introduction to CouchDB

Page 11: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Querying documents

Introduction to CouchDB

Map function

Key, Value

Key, Value

Key, Value

Key, Value

All Documents

Query by Key Key, Value

Key, Value

Page 12: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Views

•  A view is a JavaScript function –  Like a stored procedure in SQL

•  Map function is executed on every document in the database

•  Emits key/value pairs – Can emit 0, 1, or more KV pairs for each document

in the database –  Keys and values can be complex data structures

•  KV pairs are then ordered and indexed by key

Introduction to CouchDB

Page 13: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Queries

•  Queries are run against views –  i.e. searches the "key" of the list of KV pairs

•  Query types: –  Exact: key = x –  Range: key is between x and y – Multiple: key is in list (x,y,z)

•  Reduce functions –  e.g. count, sum, group

Introduction to CouchDB

Page 14: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Designing a view

•  Show messages for a specific user

Introduction to CouchDB

// This is JavaScript

function(doc) { if (doc.type && doc.to && doc.text) { if (doc.type == 'message') { for (var dest in doc.to) { emit(doc.to[dest], doc.text); } } } }

Page 15: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Creating a view

•  Can either use the GUI or the API

•  View stored in database as a "Design Document" –  A design document can contain multiple views

•  Example – Design document "_design/myview" –  View name "messages_to"

Introduction to CouchDB

Page 16: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Querying a view

Introduction to CouchDB

use Data::Dumper;

my $client = CouchDB::Client->new(); my $db = $client->newDB('jj_test'); my $view = $db->newDesignDoc('_design/myview') ->retrieve;

my $result = try { $view->queryView('messages_to', (key => 'JJ')); } catch { die "Could not query view"; };

say Dumper($result);

Page 17: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Query results

Introduction to CouchDB

varos:talk_scripts jj$ perl5.10.1 query_view.pl

$VAR1 = { 'total_rows' => 3, 'rows' => [ { 'value' => 'Hello, World', 'id' => 'docid', 'key' => 'JJ' } ], 'offset' => 2 };

Page 18: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

Conclusion

•  Different mindset to SQL database •  Quite low-level, but very powerful •  Additional features

–  Replication – Document revisions –  Reduce functions – Changes API

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

Introduction to CouchDB

Page 19: Introduction to CouchDB

Open Source Business Systems www.opusvl.com

KTHKSBYE!

Introduction to CouchDB

Thank you for listening!

Any questions?

http://www.opusvl.com

http://perl.jonallen.info/talks