Your SlideShare is downloading. ×
0
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
NoSQL - An introduction to CouchDB
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

NoSQL - An introduction to CouchDB

2,811

Published on

Introduction to CouchDB presented by Jonathan Weiss at BarCampRuhr4

Introduction to CouchDB presented by Jonathan Weiss at BarCampRuhr4

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,811
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
52
Comments
0
Likes
2
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. CouchDBA Database for the WebJonathan Weiss
  • 2. Who am I?Working for Peritor in Berlin, GermanyWritten, maintain, or involved in   Webistrano   Capistrano   SimplyStored   Happening   The great fire of Londonhttp://github.com/jweiss@jweiss 2
  • 3. ScalariumAmazon EC2 Cluster Management   Auto-config   Self-Healing   Auto-Scaling   One-click-deploymentwww.scalarium.com 3
  • 4. Database RequirementsHigh AvailabilityEasy ReplicationClusteringRobustnessShort Recovery Time 4
  • 5. 5
  • 6. CouchDBBuild for the WebScalesReplication built-inEmbracing offlineFlexible schema – document DB 6
  • 7. ”CouchDB is built of the Web“ Jacob Kaplan-Moss 7
  • 8. Web TechnologiesHTTP the access protocolJavaScript the query languageJSON 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 JSONHTTP Client PUT /dbname/ID 15
  • 16. Interacting with CouchDB GET /dbname/IDHTTP Client JSON 16
  • 17. Interacting with CouchDB DELETE /dbname/IDHTTP 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. Mapfunction(doc) { if (doc.headware) { for (var hat in doc.headware) { emit(hat, 1); } }} 23
  • 24. Map Passed every document in the DBfunction(doc) { if (doc.headware) { for (var hat in doc.headware) { emit(hat, 1); } }} 24
  • 25. Mapfunction(doc) { if (doc.headware) { Inspects for (var hat in doc.headware) { & Decides emit(hat, 1); } }} 25
  • 26. Mapfunction(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 ResultMap functions are similar to SQL indices ID KEY VALUE 51ABFA211 Cap 1 ABC123456 Cappy 1 BCCD12CBB Helmet 1 BCCD12CBB Sombrero 1Sorted by the keyKey can also be an arrayValue can be complex JSON and/or reference to other document 30
  • 31. Query a view GET /dbname/_design/hats/_view/allHTTP 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=trueHTTP Client 32
  • 33. View QueryFilter 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. Using Couch from PHPSeveral options available   PHPillow: http://arbitracker.org/phpillow.html (LGPL 3)   PHP Object_Freezer: https://github.com/sebastianbergmann/php-object-freezer/tree (BSD)   PHP On Couch: http://github.com/dready92/PHP-on-Couch/tree/master (GPLv2 or v3)   PHP CouchDB Extension: http://www.topdog.za.net/php_couchdb_extension (PHP License 3.0)   Sag for CouchDB: http://www.saggingcouch.com/ (Apache License 2.0) 35
  • 36. 36
  • 37. 37
  • 38. 38
  • 39. 39
  • 40. SimplyStoredCouchDB convenience Layer for Ruby   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 40
  • 41. Many moreOr just build your own using HTTP! 41
  • 42. Database RequirementsHigh AvailabilityEasy ReplicationClusteringRobustnessShort Recovery Time 42
  • 43. Replication B-TreeXXXXX Photo by Mathias Meyer 43
  • 44. B-TreeAppend onlyConcurrency (MVCC)Crash resistantHot backupsCompaction 44
  • 45. Replication 45
  • 46. CouchDB Replication POST /_replicate POST /_replicateEventually 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. BigCouch  Clustered CouchDB: Many CouchDBs appear as one  Modeled after Amazon Dynamo  Scalability like Cassandra or Riak  github.com/cloudant/bigcouch 50
  • 51. Q – No. of partitionsBigCouchN – No. of replicasR – Read quorumW – Write quorum 51
  • 52. VariousCouchAppsValidationsFiltered replicationChanges feedList functionsFutonGeoFulltext-Search with embedded LuceneDifferent experimental View-Server 52
  • 53. Q&APeritor GmbHBlücherstr. 22, Hof III Aufgang 610961 BerlinTel.: +49 (0)30 69 20 09 84 0Fax: +49 (0)30 69 20 09 84 9Internet: www.peritor.comE-Mail: info@peritor.com© Peritor GmbH - Alle Rechte vorbehalten

×