CouchDB on Rails
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

CouchDB on Rails

on

  • 7,536 views

Introduction into CouchDB and how to use it from Ruby/Rails. Presented by Jonathan Weiss presented at RailsCamp 4 in Cologne (03.07.2010)

Introduction into CouchDB and how to use it from Ruby/Rails. Presented by Jonathan Weiss presented at RailsCamp 4 in Cologne (03.07.2010)

Statistics

Views

Total Views
7,536
Views on SlideShare
6,787
Embed Views
749

Actions

Likes
5
Downloads
80
Comments
3

32 Embeds 749

http://rubyrailsandwindows.blogspot.com 568
http://rubyrailsandwindows.blogspot.in 34
http://rubyrailsandwindows.blogspot.de 34
http://rubyrailsandwindows.blogspot.co.uk 12
http://rubyrailsandwindows.blogspot.ca 11
http://rubyrailsandwindows.blogspot.fr 11
http://rubyrailsandwindows.blogspot.com.br 9
http://rubyrailsandwindows.blogspot.com.au 8
http://rubyrailsandwindows.blogspot.ch 6
http://rubyrailsandwindows.blogspot.pt 6
http://rubyrailsandwindows.blogspot.fi 5
http://rubyrailsandwindows.blogspot.hk 4
http://rubyrailsandwindows.blogspot.se 4
http://rubyrailsandwindows.blogspot.no 4
http://rubyrailsandwindows.blogspot.nl 4
http://rubyrailsandwindows.blogspot.sg 4
http://rubyrailsandwindows.blogspot.ru 3
http://rubyrailsandwindows.blogspot.hu 2
http://rubyrailsandwindows.blogspot.com.ar 2
http://rubyrailsandwindows.blogspot.jp 2
http://rubyrailsandwindows.blogspot.com.es 2
http://rubyrailsandwindows.blogspot.cz 2
http://rubyrailsandwindows.blogspot.mx 2
http://rubyrailsandwindows.blogspot.co.at 2
http://rubyrailsandwindows.blogspot.ie 1
http://rubyrailsandwindows.blogspot.ro 1
http://www.mefeedia.com 1
http://twittertim.es 1
http://rubyrailsandwindows.blogspot.co.nz 1
http://webcache.googleusercontent.com 1
http://www.onlydoo.com 1
http://rubyrailsandwindows.blogspot.kr 1
More...

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…
  • Thanks more comprehensive articles. One that can easily and comprehensively understood by the audience. I must say that the writer did it! Its straightforward and honest deliver made a huge impact amongst its readers. Clearly, its unparalleled presentation and mastery is something that we must celebrate and proud


    SEO Services
    Are you sure you want to
    Your message goes here
    Processing…
  • Good presentation but the Tree that is shown there is not a B-Tree, it is a binary tree.
    A B-Tree is a fully balanced data structure which usually has more than one element in one node:
    http://en.wikipedia.org/wiki/B-tree
    Are you sure you want to
    Your message goes here
    Processing…
  • GOOD
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

CouchDB on Rails Presentation Transcript

  • 1. CouchDB on Rails An Introduction Jonathan Weiss 03.07.2010
  • 2. Who am I? Working for Peritor in Berlin, Germany Written, maintain, or involved in   Webistrano   Capistrano   SimplyStored   Happening   The great fire of London http://github.com/jweiss @jweiss 2
  • 3. Scalarium EC2 Cluster Management   Auto-config   Self-Healing   Auto-Scaling   One-click-deployment www.scalarium.com 3
  • 4. Database Requirements High Availability Easy Replication Clustering Robustness Short Recovery Time 4
  • 5. 5
  • 6. CouchDB Build for the Web Scales Replication built-in Embracing offline Flexible schema – document DB 6
  • 7. ”CouchDB is built of the Web“ Jacob Kaplan-Moss 7
  • 8. Web Technologies HTTP the access protocol JavaScript the query language JSON the storage format 8
  • 9. JSON Document { "_id": "BCCD12CBB", "_rev": "1-AB764C", "type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true, "weapons": { "right_arm": "light_saber", "left_arm": null } } 9
  • 10. JSON Document { "_id": "BCCD12CBB", "_rev": "1-AB764C", "type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true, "weapons": { "right_arm": "light_saber", "left_arm": null } } 10
  • 11. JSON Document { "_id": "BCCD12CBB", "_rev": "1-AB764C", "type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true, "weapons": { "right_arm": "light_saber", "left_arm": null } } 11
  • 12. No Tables or Namespaces 12
  • 13. No Tables or Namespaces 13
  • 14. Manual Namespacing { "_id": "BCCD12CBB", "_rev": "1-AB764C", "type": "person", "name": "Darth Vader", "age": 63, "headware": ["Helmet", "Sombrero"], "dark_side": true, "weapons": { "right_arm": "light_saber", "left_arm": null } } 14
  • 15. Interacting with CouchDB JSON HTTP Client PUT /dbname/ID 15
  • 16. Interacting with CouchDB GET /dbname/ID HTTP Client JSON 16
  • 17. Interacting with CouchDB DELETE /dbname/ID HTTP Client 17
  • 18. Views 18
  • 19. Design Document { "id": "_design/hats”, "_rev": "431212AB4”, "language": "javascript”, "views": { "all": { "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” }, "by_manufacturer": { "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” } } } 19
  • 20. Design Document { Document ID "id": "_design/hats”, – "_rev": "431212AB4”, prefixed by “_design/” "language": "javascript”, "views": { "all": { "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” }, "by_manufacturer": { "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” } } } 20
  • 21. Design Document { "id": "_design/hats”, "_rev": "431212AB4”, "language": "javascript”, "views": { "all": { Hash of Views "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” }, "by_manufacturer": { "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” } } } 21
  • 22. Design Document { "id": "_design/hats”, "_rev": "431212AB4”, "language": "javascript”, "views": { "all": { Hash of Views "map": "function(doc){ .... }”, Every view has map & "reduce": "function(doc){ .... }” reduce function }, "by_manufacturer": { "map": "function(doc){ .... }”, "reduce": "function(doc){ .... }” } } } 22
  • 23. Map function(doc) { if (doc.headware) { for (var hat in doc.headware) { emit(hat, 1); } } } 23
  • 24. Map Passed every document in the DB function(doc) { if (doc.headware) { for (var hat in doc.headware) { emit(hat, 1); } } } 24
  • 25. Map function(doc) { if (doc.headware) { Inspects for (var hat in doc.headware) { & Decides emit(hat, 1); } } } 25
  • 26. Map function(doc) { if (doc.headware) { for (var hat in doc.headware) { emit(hat, 1); } } Emits result } for index 26
  • 27. Reduce function(keys, values, rereduce) { return sum(values); } 27
  • 28. Reduce Passed map result (or partial reduce result) function(keys, values, rereduce) { return sum(values); } 28
  • 29. Reduce function(keys, values, rereduce) { return sum(values); } Aggregates (count, sum, average, …) 29
  • 30. Example Map Result Map functions are similar to SQL indices ID KEY VALUE 51ABFA211 Cap 1 ABC123456 Cappy 1 BCCD12CBB Helmet 1 BCCD12CBB Sombrero 1 Sorted by the key Key can also be an array Value can be complex JSON 30
  • 31. Query a view GET /dbname/_design/hats/_view/all HTTP Client {"total_rows":348,"offset":0,"rows”:[ {"id":"A","key":"A","value":1}, {"id":"B","key":"B","value":1}, ]} 31
  • 32. Query a view GET /dbname/_design/hats/_view/all? include_docs=true HTTP Client 32
  • 33. View Query Filter by   key=ABC123   startkey=123 & endkey=9   limit=100   descending=true   group=true   reduce=true   Include_docs=true 33
  • 34. SQL vs. JavaScript Vs. 34
  • 35. SQL vs. JavaScript ActiveRecord Vs. SimplyStored 35
  • 36. SimplyStored Convenience Layer for CouchDB   Models & Associations   Validations   Callbacks BSD-licensed on   Dynamic finder http://github.com/peritor/simply_stored   S3 attachments On top of CouchPotato, CouchRest & RestClient   Paranoid delete   ActiveModel compliant 36
  • 37. Setup Install Load in environment.rb Configure 37
  • 38. Setup 38
  • 39. 39
  • 40. 40
  • 41. RockingChair In-memory CouchDB   Just a big Hash   Understands all SimplyStored generated views   Speeds up tests   Tests can run in parallel   Nice for debugging BSD-licensed on http://github.com/jweiss/rocking_chair 41
  • 42. Database Requirements High Availability Easy Replication Clustering Robustness Short Recovery Time 42
  • 43. Replication B-Tree XXXXX Photo by Mathias Meyer 43
  • 44. B-Tree Append only Concurrency (MVCC) Crash resistant Hot backups Compaction 44
  • 45. Replication 45
  • 46. CouchDB Replication POST /_replicate POST /_replicate Eventually consistent & conflict resolution 46
  • 47. Load Balancing Replication HTTP Client HTTP Load Balancer 47
  • 48. Caching HTTP Client HTTP Cache Varnish Apache … 48
  • 49. Multi-Master 49
  • 50. Sharding/Partitioning with CouchDB Lounge HTTP Client CouchDB Lounge 50
  • 51. Sharding with CouchDB Lounge HTTP Client CouchDB Lounge 51
  • 52. Various CouchApps Validations Filtered replication Changes feed Futon Geo Fulltext-Search with embedded Lucene Experimental Ruby-View-Server 52
  • 53. Q&A Peritor GmbH Blücherstr. 22, Hof III Aufgang 6 10961 Berlin Tel.: +49 (0)30 69 20 09 84 0 Fax: +49 (0)30 69 20 09 84 9 Internet: www.peritor.com E-Mail: info@peritor.com © Peritor GmbH - Alle Rechte vorbehalten