Share
Embed
Transcript
103 slides
-
Introduction Documents Distributed System Queries and Views CouchApps CouchDB Kerstin
Puschke The Next Web - Barcamp Salzburg 2011 Kerstin Puschke NoSQL -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Outline 1
Introduction Kerstin Puschke NoSQL -
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 -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster
Of Unreliable Commodity Hardware DataBase Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps CouchDB? Cluster
Of Unreliable Commodity Hardware DataBase NoSQL database, non-relational data store Kerstin Puschke NoSQL -
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 -
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 -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps In the
Wild BBC Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps In the
Wild BBC Ubuntu One Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps In the
Wild BBC Ubuntu One lots of software, websites, facebook apps, . . . Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps Getting Started
RESTful HTTP/JSON API Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps Getting Started
RESTful HTTP/JSON API Webserver included Kerstin Puschke NoSQL -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Document-Oriented Data
Model Updates and Concurrency Design Documents CouchDB Document JSON Kerstin Puschke NoSQL -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Replication shared
nothing cluster Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps Replication shared
nothing cluster incremental Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps Replication shared
nothing cluster incremental latest revision only - no transfer of previous versions Kerstin Puschke NoSQL -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Views Creating
Views with Map Reduce Example Queries fetch document by _id Kerstin Puschke NoSQL -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Views Creating
Views with Map Reduce Example Views (secondary) index key-value-pairs Kerstin Puschke NoSQL -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Views Creating
Views with Map Reduce Example Querying View Example View without reduce Kerstin Puschke NoSQL -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Views Creating
Views with Map Reduce Example Example Blogpost with “inline” comments Kerstin Puschke NoSQL -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Views Creating
Views with Map Reduce Example Example contd. Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps CouchApps applications
living in the database Kerstin Puschke NoSQL -
Introduction Documents Distributed System Queries and Views CouchApps CouchApps applications
living in the database no middleware Kerstin Puschke NoSQL -
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 -
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 -
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 -
Introduction Documents Distributed System Queries and Views CouchApps Q &
A Thanks for listening! Questions? Comments? Kerstin Puschke NoSQL -
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 -
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 -
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