Introduction to couchdb

3,821 views

Published on

Introduction to couchdb

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,821
On SlideShare
0
From Embeds
0
Number of Embeds
1,171
Actions
Shares
0
Downloads
74
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introduction to couchdb

  1. 1. Introduction to CouchDB Jon Allen (JJ) http://perl.jonallen.info - jj@jonallen.info
  2. 2. What is CouchDB? •  Document Oriented DatabaseIntroduction to CouchDB perl.jonallen.info
  3. 3. What is CouchDB? •  Document Oriented Database –  No schema •  Stores "documents" (i.e. data structures) –  No SQL •  Uses MapReduce queries written in JavaScriptIntroduction to CouchDB perl.jonallen.info
  4. 4. 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, scalabilityIntroduction to CouchDB perl.jonallen.info
  5. 5. 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 –  CMSIntroduction to CouchDB perl.jonallen.info
  6. 6. Using CouchDB from Perl •  HTTP REST API •  No DBI, DBD, DBIx::Class etc •  CPAN modules –  CouchDB::Client –  AnyEvent::CouchDBIntroduction to CouchDB perl.jonallen.info
  7. 7. Creating a database 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"; };Introduction to CouchDB perl.jonallen.info
  8. 8. Inserting a document 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"; };Introduction to CouchDB perl.jonallen.info
  9. 9. Inserting a document 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 { Document ID, Revision ID $doc->create; must be unique } catch { die "Could not create document"; };Introduction to CouchDB perl.jonallen.info
  10. 10. CouchDB GUI Introduction to CouchDB perl.jonallen.info
  11. 11. Querying documents All Map function Documents Key, Value Key, Value Key, Value Query by Key Key, Value Key, Value Key, Value Introduction to CouchDB perl.jonallen.info
  12. 12. 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 keyIntroduction to CouchDB perl.jonallen.info
  13. 13. 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, groupIntroduction to CouchDB perl.jonallen.info
  14. 14. Designing a view •  Show messages for a specific user my $view = <<EOT; 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); } } } } EOTIntroduction to CouchDB perl.jonallen.info
  15. 15. Creating a view my $client = CouchDB::Client->new(); my $db = $client->newDB(jj_test); my $doc = $db->newDesignDoc(_design/myview,undef, { views => { messages_to => { map => $view }, }, }); try { $doc->create; } catch { die "Could not create document"; };Introduction to CouchDB perl.jonallen.info
  16. 16. Querying a view 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);Introduction to CouchDB perl.jonallen.info
  17. 17. Query results varos:talk_scripts jj$ perl5.10.1 query_view.pl $VAR1 = { total_rows => 3, rows => [ { value => Hello, World, id => docid, key => JJ } ], offset => 2 };Introduction to CouchDB perl.jonallen.info
  18. 18. 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 perl.jonallen.info
  19. 19. KTHKSBYE! Thank you for listening! Any questions? http://perl.jonallen.info/talks Introduction to CouchDB perl.jonallen.info

×