$30 off During Our Annual Pro Sale. View Details »

CouchDB

 CouchDB

CouchDB Session, Barcamp 'The Next Web', Salzburg 2011

Kerstin Puschke

March 11, 2011
Tweet

More Decks by Kerstin Puschke

Other Decks in Programming

Transcript

  1. Introduction Documents Distributed System Queries and Views CouchApps CouchDB Kerstin

    Puschke The Next Web - Barcamp Salzburg 2011 Kerstin Puschke NoSQL
  2. Introduction Documents Distributed System Queries and Views CouchApps License License

    Creative Commons Attribution 3.0 Germany Lizenz, see http://creativecommons.org/licenses/by/3.0/de/ Kerstin Puschke NoSQL
  3. Introduction Documents Distributed System Queries and Views CouchApps Outline 1

    Introduction 2 Documents Document-Oriented Data Model Updates and Concurrency Design Documents Kerstin Puschke NoSQL
  4. Introduction Documents Distributed System Queries and Views CouchApps Outline 1

    Introduction 2 Documents Document-Oriented Data Model Updates and Concurrency Design Documents 3 Distributed System Kerstin Puschke NoSQL
  5. Introduction Documents Distributed System Queries and Views CouchApps Outline 1

    Introduction 2 Documents Document-Oriented Data Model Updates and Concurrency Design Documents 3 Distributed System 4 Queries and Views Views Creating Views with Map Reduce Example Kerstin Puschke NoSQL
  6. Introduction Documents Distributed System Queries and Views CouchApps Outline 1

    Introduction 2 Documents Document-Oriented Data Model Updates and Concurrency Design Documents 3 Distributed System 4 Queries and Views Views Creating Views with Map Reduce Example 5 CouchApps Kerstin Puschke NoSQL
  7. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase Kerstin Puschke NoSQL
  8. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store Kerstin Puschke NoSQL
  9. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store schemaless Kerstin Puschke NoSQL
  10. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store schemaless distributed computing - robust replication Kerstin Puschke NoSQL
  11. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store schemaless distributed computing - robust replication scaling up and down Kerstin Puschke NoSQL
  12. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store schemaless distributed computing - robust replication scaling up and down open web standards Kerstin Puschke NoSQL
  13. Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster

    Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store schemaless distributed computing - robust replication scaling up and down open web standards decentralized (web)applications - available offline Kerstin Puschke NoSQL
  14. Introduction Documents Distributed System Queries and Views CouchApps In the

    Wild BBC Ubuntu One lots of software, websites, facebook apps, . . . Kerstin Puschke NoSQL
  15. Introduction Documents Distributed System Queries and Views CouchApps Getting Started

    RESTful HTTP/JSON API Webserver included Kerstin Puschke NoSQL
  16. Introduction Documents Distributed System Queries and Views CouchApps Getting Started

    RESTful HTTP/JSON API Webserver included http://localhost:5984 http://localhost:5984/_all_dbs Kerstin Puschke NoSQL
  17. Introduction Documents Distributed System Queries and Views CouchApps Getting Started

    RESTful HTTP/JSON API Webserver included http://localhost:5984 http://localhost:5984/_all_dbs create a database PUT http://localhost:5984/foo Kerstin Puschke NoSQL
  18. Introduction Documents Distributed System Queries and Views CouchApps Getting Started

    RESTful HTTP/JSON API Webserver included http://localhost:5984 http://localhost:5984/_all_dbs create a database PUT http://localhost:5984/foo delete a a database DELETE http://localhost:5984/foo Kerstin Puschke NoSQL
  19. Introduction Documents Distributed System Queries and Views CouchApps Getting Started

    RESTful HTTP/JSON API Webserver included http://localhost:5984 http://localhost:5984/_all_dbs create a database PUT http://localhost:5984/foo delete a a database DELETE http://localhost:5984/foo Webinterface Futon http://localhost:5984/_utils Kerstin Puschke NoSQL
  20. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs Kerstin Puschke NoSQL
  21. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) Kerstin Puschke NoSQL
  22. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) schemaless, no referential integrity flexible, but dangerous Kerstin Puschke NoSQL
  23. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) schemaless, no referential integrity flexible, but dangerous JSON-object values can be scalar, array, objects, nested data structures,. . . Kerstin Puschke NoSQL
  24. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) schemaless, no referential integrity flexible, but dangerous JSON-object values can be scalar, array, objects, nested data structures,. . . mandatory fields: Kerstin Puschke NoSQL
  25. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) schemaless, no referential integrity flexible, but dangerous JSON-object values can be scalar, array, objects, nested data structures,. . . mandatory fields: unique document identifier _id (UUID) Kerstin Puschke NoSQL
  26. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) schemaless, no referential integrity flexible, but dangerous JSON-object values can be scalar, array, objects, nested data structures,. . . mandatory fields: unique document identifier _id (UUID) revision identifier _rev Kerstin Puschke NoSQL
  27. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Document-Oriented Data Model abstraction layer above key-value pairs document: self-contained data, reasonable unit of information (invoice, business card,. . . ) schemaless, no referential integrity flexible, but dangerous JSON-object values can be scalar, array, objects, nested data structures,. . . mandatory fields: unique document identifier _id (UUID) revision identifier _rev files can be attached to documents Kerstin Puschke NoSQL
  28. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents CouchDB Document JSON Kerstin Puschke NoSQL
  29. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Updates client sends full document Kerstin Puschke NoSQL
  30. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Updates client sends full document append-only - new version appended to database no diffs, no partial updates Kerstin Puschke NoSQL
  31. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Updates client sends full document append-only - new version appended to database no diffs, no partial updates robust and fast Kerstin Puschke NoSQL
  32. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Multi Version Concurrency Control optimistic locking Kerstin Puschke NoSQL
  33. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Multi Version Concurrency Control optimistic locking client sends new version of document along with old _rev Kerstin Puschke NoSQL
  34. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Multi Version Concurrency Control optimistic locking client sends new version of document along with old _rev server checks if _rev matches the one stored in the database Kerstin Puschke NoSQL
  35. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Multi Version Concurrency Control optimistic locking client sends new version of document along with old _rev server checks if _rev matches the one stored in the database yes: new version saved along with new _rev Kerstin Puschke NoSQL
  36. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Multi Version Concurrency Control optimistic locking client sends new version of document along with old _rev server checks if _rev matches the one stored in the database yes: new version saved along with new _rev no: conflict - update refused with 409 Kerstin Puschke NoSQL
  37. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Multi Version Concurrency Control optimistic locking client sends new version of document along with old _rev server checks if _rev matches the one stored in the database yes: new version saved along with new _rev no: conflict - update refused with 409 no version control some versions unavailable (at least on some nodes) Kerstin Puschke NoSQL
  38. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design Kerstin Puschke NoSQL
  39. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document Kerstin Puschke NoSQL
  40. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document no data but code Kerstin Puschke NoSQL
  41. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document no data but code validate_doc_update: validation of updates Kerstin Puschke NoSQL
  42. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document no data but code validate_doc_update: validation of updates update: server-side logic for document creation or update Kerstin Puschke NoSQL
  43. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document no data but code validate_doc_update: validation of updates update: server-side logic for document creation or update show, list: rendering output Kerstin Puschke NoSQL
  44. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document no data but code validate_doc_update: validation of updates update: server-side logic for document creation or update show, list: rendering output map, reduce: creation of views/indices Kerstin Puschke NoSQL
  45. Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data

    Model Updates and Concurrency Design Documents Design Documents _id starts with _design create, update, replicate,. . . like any other document no data but code validate_doc_update: validation of updates update: server-side logic for document creation or update show, list: rendering output map, reduce: creation of views/indices default language: JavaScript plugins for PHP, Ruby, Python, Perl, Common Lisp, Erlang,. . . Kerstin Puschke NoSQL
  46. Introduction Documents Distributed System Queries and Views CouchApps Replication shared

    nothing cluster incremental latest revision only - no transfer of previous versions Kerstin Puschke NoSQL
  47. Introduction Documents Distributed System Queries and Views CouchApps Replication shared

    nothing cluster incremental latest revision only - no transfer of previous versions N-Master, Master-Slave,. . . Kerstin Puschke NoSQL
  48. Introduction Documents Distributed System Queries and Views CouchApps Replication shared

    nothing cluster incremental latest revision only - no transfer of previous versions N-Master, Master-Slave,. . . very robust Kerstin Puschke NoSQL
  49. Introduction Documents Distributed System Queries and Views CouchApps Replication shared

    nothing cluster incremental latest revision only - no transfer of previous versions N-Master, Master-Slave,. . . very robust filtered Kerstin Puschke NoSQL
  50. Introduction Documents Distributed System Queries and Views CouchApps Replication shared

    nothing cluster incremental latest revision only - no transfer of previous versions N-Master, Master-Slave,. . . very robust filtered ’non-destructive’ conflict handling Kerstin Puschke NoSQL
  51. Introduction Documents Distributed System Queries and Views CouchApps Eventual Consistency

    Consistency, Availability, Partition Tolerance Consistency, Availability, Partition Tolerance - you can’t have it all. . . Kerstin Puschke NoSQL
  52. Introduction Documents Distributed System Queries and Views CouchApps Eventual Consistency

    Consistency, Availability, Partition Tolerance Consistency, Availability, Partition Tolerance - you can’t have it all. . . CouchDB provides eventual consistency Kerstin Puschke NoSQL
  53. Introduction Documents Distributed System Queries and Views CouchApps Eventual Consistency

    Consistency, Availability, Partition Tolerance Consistency, Availability, Partition Tolerance - you can’t have it all. . . CouchDB provides eventual consistency inconsistency window Kerstin Puschke NoSQL
  54. Introduction Documents Distributed System Queries and Views CouchApps Eventual Consistency

    Consistency, Availability, Partition Tolerance Consistency, Availability, Partition Tolerance - you can’t have it all. . . CouchDB provides eventual consistency inconsistency window BASE - basically available, soft-state, eventually consistent Kerstin Puschke NoSQL
  55. Introduction Documents Distributed System Queries and Views CouchApps Eventual Consistency

    Consistency, Availability, Partition Tolerance Consistency, Availability, Partition Tolerance - you can’t have it all. . . CouchDB provides eventual consistency inconsistency window BASE - basically available, soft-state, eventually consistent ACID on a single node, BASE in a distributed system Kerstin Puschke NoSQL
  56. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Queries fetch document by _id Kerstin Puschke NoSQL
  57. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Queries fetch document by _id no dynamic queries, no ad hoc reporting Kerstin Puschke NoSQL
  58. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Queries fetch document by _id no dynamic queries, no ad hoc reporting need to create views (indices) to query Kerstin Puschke NoSQL
  59. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs Kerstin Puschke NoSQL
  60. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Kerstin Puschke NoSQL
  61. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Example: creation date as key, title of post as value Kerstin Puschke NoSQL
  62. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Example: creation date as key, title of post as value composite keys and values possible Kerstin Puschke NoSQL
  63. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Example: creation date as key, title of post as value composite keys and values possible sorted by key Kerstin Puschke NoSQL
  64. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Example: creation date as key, title of post as value composite keys and values possible sorted by key efficient lookup of keys or key ranges ’Posts created in May 2009’ Kerstin Puschke NoSQL
  65. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Example: creation date as key, title of post as value composite keys and values possible sorted by key efficient lookup of keys or key ranges ’Posts created in May 2009’ values can be aggregated Kerstin Puschke NoSQL
  66. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Views (secondary) index key-value-pairs keys and values are values from documents Example: creation date as key, title of post as value composite keys and values possible sorted by key efficient lookup of keys or key ranges ’Posts created in May 2009’ values can be aggregated created and updated when accessed Kerstin Puschke NoSQL
  67. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example View Example View with key date and value title, in Futon Kerstin Puschke NoSQL
  68. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming Kerstin Puschke NoSQL
  69. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) Kerstin Puschke NoSQL
  70. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents Kerstin Puschke NoSQL
  71. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map Kerstin Puschke NoSQL
  72. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map input: one document Kerstin Puschke NoSQL
  73. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map input: one document computes key-value pairs for view Kerstin Puschke NoSQL
  74. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map input: one document computes key-value pairs for view sorted by key Kerstin Puschke NoSQL
  75. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map input: one document computes key-value pairs for view sorted by key reduce (optional) Kerstin Puschke NoSQL
  76. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map input: one document computes key-value pairs for view sorted by key reduce (optional) input: (partial) results of map or of previous calls to reduce Kerstin Puschke NoSQL
  77. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Reduce map and reduce functions common in functional programming MapReduce: framework for concurrent, distributed processing of large data sets (Google) map and reduce defined in design documents map input: one document computes key-value pairs for view sorted by key reduce (optional) input: (partial) results of map or of previous calls to reduce returns aggregated values Kerstin Puschke NoSQL
  78. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Map Function Example Design doc with map Kerstin Puschke NoSQL
  79. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Reduce Function Example Design doc with map and reduce Kerstin Puschke NoSQL
  80. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Querying View Example View without reduce Kerstin Puschke NoSQL
  81. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Querying a View Example View with reduce Kerstin Puschke NoSQL
  82. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Querying a View Example View with reduce View with reduce and group_level=2 Kerstin Puschke NoSQL
  83. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Example Blogpost with “inline” comments Kerstin Puschke NoSQL
  84. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Example Posts and Comments in different docs Kerstin Puschke NoSQL
  85. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Example View to query for posts and their comments map-function with composite key function(doc) { if (doc.type == "post") { emit([doc._id, 0], doc); } else if (doc.type == "comment") { emit([doc.post_id, 1], doc); } } Kerstin Puschke NoSQL
  86. Introduction Documents Distributed System Queries and Views CouchApps Views Creating

    Views with Map Reduce Example Example contd. Kerstin Puschke NoSQL
  87. Introduction Documents Distributed System Queries and Views CouchApps CouchApps applications

    living in the database no middleware data and code are documents: update, fork, backup etc. via replication Kerstin Puschke NoSQL
  88. Introduction Documents Distributed System Queries and Views CouchApps CouchApps applications

    living in the database no middleware data and code are documents: update, fork, backup etc. via replication show/list functions, direct access to attachments (HTML,JavaScript,. . . ) Kerstin Puschke NoSQL
  89. Introduction Documents Distributed System Queries and Views CouchApps CouchApps applications

    living in the database no middleware data and code are documents: update, fork, backup etc. via replication show/list functions, direct access to attachments (HTML,JavaScript,. . . ) load data via AJAX Kerstin Puschke NoSQL
  90. Introduction Documents Distributed System Queries and Views CouchApps Q &

    A Thanks for listening! Questions? Comments? Kerstin Puschke NoSQL
  91. Links The CouchDB Project http://couchdb.apache.org CouchDB Wiki http://wiki.apache.org/couchdb Book: CouchDB

    - The Definitive Guide http://guide.couchdb.org Kerstin Puschke NoSQL
  92. Links The CouchDB Project http://couchdb.apache.org CouchDB Wiki http://wiki.apache.org/couchdb Book: CouchDB

    - The Definitive Guide http://guide.couchdb.org CouchApp - framework: Simple JavaScript applications with CouchDB http://couchapp.org Kerstin Puschke NoSQL
  93. Links The CouchDB Project http://couchdb.apache.org CouchDB Wiki http://wiki.apache.org/couchdb Book: CouchDB

    - The Definitive Guide http://guide.couchdb.org CouchApp - framework: Simple JavaScript applications with CouchDB http://couchapp.org Couchbase - free hosting, docs, and more http://www.couchone.com Kerstin Puschke NoSQL