SlideShare a Scribd company logo
CouchDB Talk JChris NYC
Hello
• Chris Anderson <jchris@apache.org>
• Blog: http://jchris.mfdz.com
• Founder, Grabb.it (web analytics for music)
• Ruby on Rails veteran
• CouchDB committer
And You?
• Used CouchDB (for fun)
• Evaluating or using it (for a project)
• Interested in contributing?
• Just here for the pizza?
History
• Damien Katz <http://damienkatz.net/>
• Worked on Lotus Notes & MySQL
• Started in 2005: C++ and XML, on Windows
• 2006: Moved to Erlang, JSON, and POSIX
• 0.7.0 first release of today’s CouchDB
• Version 1.0 Planned for the end of 2008
Why CouchDB?
• Common use cases no longer fit RDBMS
• Native to web applications
• Peer-based replication for freedom
• Takes today’s scalability lessons to heart
This Talk
• How is CouchDB different (from RDBMS)?
• Example HTML/Javascript application
• Quick tour of the internals
How Is CouchDB Different?
           RESTful HTTP

     Schemaless JSON Documents

         Map/Reduce Views

       Incremental Replication
How Is CouchDB Different?
    (from SQL RDBMS)
            RESTful HTTP
            Binary Protocol
      Schemaless JSON Documents
     Typed Columns & Primary Keys
          Map/Reduce Views
           Ad-hoc Queries
        Incremental Replication
            Replication Logs
RESTful HTTP
       Built for the web

      Javascript Test Suite

     Standard HTTP Clients,
Proxies, Load Balancers & Caches
RESTful HTTP
         Built for the web
           Enterprisey
       Javascript Test Suite
         Battle Hardened
     Standard HTTP Clients,
Proxies, Load Balancers & Caches
     Protocol Specific Tools
Schemaless JSON
   Documents
        Flat Namespace

   Arbitrary JSON Structures

       Identified By URIs

Optimistic Locking (ACID/MVCC)
Schemaless JSON
   Documents
          Flat Namespace
               Tables
    Arbitrary JSON Structures
Typed Columns and Key Constraints
        Identified By URIs
           Primary Keys
 Optimistic Locking (ACID/MVCC)
   Row or Column Level Locking
Map/Reduce Views
    Functional Javascript

   Incremental Updates

        Predefined

  High-Performance Reads
Map/Reduce Views
     Functional Javascript
       SQL Statements
     Incremental Updates
         Independent
          Predefined
     Ad-hoc and Complex
   High-Performance Reads
 Indexes Computed on Writes
Incremental Replication
         User Triggered

         Offline Clients

     Resilient & Restartable

             HTTP
Incremental Replication
         User Triggered
           Continuous
         Offline Clients
           Master/Slave
     Resilient & Restartable
           Critical Path
              HTTP
            Log Based
CouchDB
A new way to write web applications.
            HTML / Javascript

           _design Documents

             p2p Replication
Live Code!
http://169.254.251.59:5984/_utils/
CouchDB Internals
• couch_httpd.erl
   • Request Dispatch
   • Create Database
   • Get Document
• Other Modules
Request Dispatch
Create Database
Get Document
Other Modules
• couch_btree.erl
 • The heart of the storage module (stores
    Erlang terms sorted by key using user
    specified sort funtions)
• couch_db_updater.erl
 • Translates document requests into Btree
    actions.
• couch_query_servers.erl
 • Communicates with the external
    (Javascript etc) view servers.
Join Us

• #couchdb on irc.freenode.net
• http://couchdb.org
 • mailing lists
 • links to wiki and subversion checkout
Thank You!
 Any Questions?

More Related Content

CouchDB Talk JChris NYC

  • 2. Hello • Chris Anderson <jchris@apache.org> • Blog: http://jchris.mfdz.com • Founder, Grabb.it (web analytics for music) • Ruby on Rails veteran • CouchDB committer
  • 3. And You? • Used CouchDB (for fun) • Evaluating or using it (for a project) • Interested in contributing? • Just here for the pizza?
  • 4. History • Damien Katz <http://damienkatz.net/> • Worked on Lotus Notes & MySQL • Started in 2005: C++ and XML, on Windows • 2006: Moved to Erlang, JSON, and POSIX • 0.7.0 first release of today’s CouchDB • Version 1.0 Planned for the end of 2008
  • 5. Why CouchDB? • Common use cases no longer fit RDBMS • Native to web applications • Peer-based replication for freedom • Takes today’s scalability lessons to heart
  • 6. This Talk • How is CouchDB different (from RDBMS)? • Example HTML/Javascript application • Quick tour of the internals
  • 7. How Is CouchDB Different? RESTful HTTP Schemaless JSON Documents Map/Reduce Views Incremental Replication
  • 8. How Is CouchDB Different? (from SQL RDBMS) RESTful HTTP Binary Protocol Schemaless JSON Documents Typed Columns & Primary Keys Map/Reduce Views Ad-hoc Queries Incremental Replication Replication Logs
  • 9. RESTful HTTP Built for the web Javascript Test Suite Standard HTTP Clients, Proxies, Load Balancers & Caches
  • 10. RESTful HTTP Built for the web Enterprisey Javascript Test Suite Battle Hardened Standard HTTP Clients, Proxies, Load Balancers & Caches Protocol Specific Tools
  • 11. Schemaless JSON Documents Flat Namespace Arbitrary JSON Structures Identified By URIs Optimistic Locking (ACID/MVCC)
  • 12. Schemaless JSON Documents Flat Namespace Tables Arbitrary JSON Structures Typed Columns and Key Constraints Identified By URIs Primary Keys Optimistic Locking (ACID/MVCC) Row or Column Level Locking
  • 13. Map/Reduce Views Functional Javascript Incremental Updates Predefined High-Performance Reads
  • 14. Map/Reduce Views Functional Javascript SQL Statements Incremental Updates Independent Predefined Ad-hoc and Complex High-Performance Reads Indexes Computed on Writes
  • 15. Incremental Replication User Triggered Offline Clients Resilient & Restartable HTTP
  • 16. Incremental Replication User Triggered Continuous Offline Clients Master/Slave Resilient & Restartable Critical Path HTTP Log Based
  • 17. CouchDB A new way to write web applications. HTML / Javascript _design Documents p2p Replication
  • 19. CouchDB Internals • couch_httpd.erl • Request Dispatch • Create Database • Get Document • Other Modules
  • 23. Other Modules • couch_btree.erl • The heart of the storage module (stores Erlang terms sorted by key using user specified sort funtions) • couch_db_updater.erl • Translates document requests into Btree actions. • couch_query_servers.erl • Communicates with the external (Javascript etc) view servers.
  • 24. Join Us • #couchdb on irc.freenode.net • http://couchdb.org • mailing lists • links to wiki and subversion checkout
  • 25. Thank You! Any Questions?