Introduction to couch_db

  • 949 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
949
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
15
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Introduction to CouchDB Jon Allen (JJ) http://perl.jonallen.info - jj@jonallen.info
  • 2. What is CouchDB?
    • Document Oriented Database
    Introduction to CouchDB
  • 3. 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
  • 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, scalability
    Introduction to CouchDB
  • 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
      • CMS
    Introduction to CouchDB
  • 6. Using CouchDB from Perl
    • HTTP REST API
    • No DBI, DBD, DBIx::Class etc
    • CPAN modules
      • CouchDB::Client
      • AnyEvent::CouchDB
    Introduction to CouchDB
  • 7. 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"; };
  • 8. 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"; };
  • 9. 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
  • 10. CouchDB GUI Introduction to CouchDB
  • 11. Querying documents Introduction to CouchDB Map function Key, Value Key, Value Key, Value Key, Value All Documents Query by Key Key, Value Key, Value
  • 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 key
    Introduction to CouchDB
  • 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, group
    Introduction to CouchDB
  • 14. Designing a view
    • Show messages for a specific user
    Introduction to CouchDB 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); } } } } EOT
  • 15. Creating a view Introduction to CouchDB 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 &quot;Could not create document&quot;; };
  • 16. 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 &quot;Could not query view&quot;; }; say Dumper($result);
  • 17. 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 };
  • 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
  • 19. KTHKSBYE! Introduction to CouchDB Thank you for listening! Any questions? http://perl.jonallen.info/talks