SlideShare a Scribd company logo
NOSQL, COUCHDB
 AND THE CLOUD
    Brad Anderson
       Cloudant




          1
BRAD ANDERSON

• BS   Hotel Management

• Restaurant   Chain Data - econometric modeling, BI/DW

• Open   Source - trac, dsource.org, couchdb

• NOSQLEast     2009

• Cloudant

• http://twitter.com/boorad


                                2
AGENDA

• NOSQL

• COUCHDB

 •   Erlang

• Cloud

 •   Dynamo

 •   MapReduce


                   3
YOU’RE SCREWED




http://www.bigfatmoneybags.com/blog/wp-content/uploads/2009/12/screwed.jpg

                                                                             4
RELATIONAL DATABASES


                                                           RDBMS
• Rigid         Schema / ORM fun
                                                           1970-2009
• Scalability

• Everything                 is a Nail



http://www.flickr.com/photos/36041246@N00/3419197777/

                                                       5
MASTER-SLAVE
•   Master-Slave Replication
    •   One (and only one) master
    •   One or more slaves
    •   All writes go to the master, replicated to slaves
    •   Reads balanced among master and slaves
•   Issues
    •   single point of failure
    •   single point of bottleneck
    •   static topology
                                       6
MASTER-MASTER

•   Master-Master Replication
    •   One or more masters
    •   Writes and reads can go to any master
    •   Writes are replicated among masters
•   Issues
    •   limited performance and scalability (typically due to 2PC)
    •   complexity
    •   static topology

                                      7
VERTICAL PARTITION

•   Vertical Partitioning
    •   Put tables belonging to different functional areas on different
        database nodes
        •   Scale data & load by function
        •   Move joins to the application level
•   Issues
    •   no longer truly relational
    •   a functional area grows too much
                                        8
HORIZONTAL PARTITION

•   Horizontal Partitioning
    •   Split tables by key and put partitions (shards) on different nodes
        •   Scale data & load by key
        •   Move joins to the application level
•   Issues
    •   no longer truly relational
    •   a partition grows too much

                                        9
CACHING

•   Put a cache in front of your database
    •   Distribute
    •   Write-through for scaling reads
    •   Write-behind for scaling reads and writes
•   Issues
    •   “only” scales read/write load
    •   invalidation

                                        10
OKAY, NOT SCREWED




http://www.bigfatmoneybags.com/blog/wp-content/uploads/2009/12/screwed.jpg

                                                                             11
NOSQL

        NOT ONLY SQL
   A moniker for different data storage systems
         solving very different problems,
all where a relational database is not the right fit.

                         12
RIGHT FIT


• Google   indexes 400 Pb / day (2007)

• CERN, LHC       generates 100 Pb / sec

• Unique   data created each year (IDC, 2007)
 •   2007 40 Eb

 •   2010 988 Eb (exponential growth)



                                    13
FOUR CATEGORIES
• Key/Value     Stores
   •   Dynomite, Voldemort, Tokyo

• Document       Stores
   •   CouchDB, MongoDB

• Column     Stores / BigTable
   •   HBase, Hypertable

• Graph    Databases
   •   Neo4j, AllegroGraph, VertexDB


                                       14
BIG TAKEAWAY

                                                           function

       function                                             data
                                                function              function

                                                 data                  data



                                     function                                    function
data              data
                                      data                                        data
data              data

data              data
                                     function                                    function
data              data
                                      data                                        data
data              data

                                                function              function

                                                 data                  data
                                                           function

                                                            data




                  Bring the function to the data
                                15
16
HUH? ERLANG?


• Programming    Language created at Ericsson (20 yrs
 old now)

• Designed   for scalable, long-lived systems

• Compiled, Functional, Dynamically Typed, Open
 Source




                                  17
3 BIGGIES
• Massively      Concurrent

    •   green threads, very lightweight != os threads


• Seamlessly       Distributed

    •   node = os thread = VM, processes can live anywhere


• Fault Tolerant

    •   99.9999999 = 32ms downtime per year - AXD301



                                                 18
Of
                  fi   cia
                         lB
                              et
                                a!




CouchDB
 Apache


          19
COUCHDB
• Schema-free      document database server

• Robust, highly   concurrent, fault-tolerant

• RESTful   JSON API

• Futon   web admin console

• MapReduce     system for generating custom views

• Bi-directional   incremental replication

• couchapp: lightweight
                    HTML+JavaScript apps served directly
 from CouchDB using views to transform JSON
                                   20
FROM INTEREST TO ADOPTION




• 100+   production users          • Active
                                          commercial
•3
                                    development
     books being written
                                   • Rapidly   maturing
• Vibrant, open   community   21
OF THE WEB

   Django may be built for the Web, but
  CouchDB is built of the Web. I've never
seen software that so completely embraces
  the philosophies behind HTTP ... this is
 what the software of the future looks like.


                Jacob Kaplan-Moss
                 October 17 2007

   http://jacobian.org/writing/of-the-web/
                       22
DOCUMENTS




• Documents   are JSON Objects

• Underscore-prefixed   fields are reserved

• Documents   can have binary attachments

• MVCC   _rev deterministically generated from doc content
                               23
ROBUST

• Never   overwrite previously committed data

• In
   the event of a server crash or power failure, just restart
 CouchDB -- there is no “repair”

• Take   snapshots with “cp”

• Configurable levels of durability: can choose to fsync after
 every update, or less often to gain better throughput



                                24
CONCURRENT

• Erlang
       approach: lightweight processes to model the natural
 concurrency in a problem

• For   CouchDB that means one process per TCP connection

• Lock-free
          architecture; each process works with an MVCC
 snapshot of a DB.

• Performance   degrades gracefully under heavy concurrent load


                               25
REST API
• Create
 PUT /mydb/mydocid

• Retrieve
 GET /mydb/mydocid

• Update
 PUT /mydb/mydocid

• Delete
 DELETE /mydb/mydocid

                        26
27
VIEWS
• Custom, persistent   representations of document data

• “Closeto the metal” -- no dynamic queries in production, so
 you know exactly what you’re getting

• Generated using MapReduce functions written in JavaScript
 (and other languages)

     view must have a map function and may also have a
• Each
 reduce function

• Leverages   view collation, rich view query API
                                 28
DOCUMENTS BY AUTHOR




         29
WORD COUNT




    30
INCREMENTAL
• Computing   a view can be expensive, so CouchDB saves the
 result in a B-tree and keeps it up-to-date

• Leafnodes store map results, inner nodes store reductions of
 children




 http://horicky.blogspot.com/2008/10/couchdb-implementation.html
                               31
REPLICATION
• Peer-based, bi-directional   replication using normal HTTP calls

• Mediated  by a replicator process which can live on the
 source, target, or somewhere else entirely

• Replicate
          a subset of documents in a DB meeting criteria
 defined in a custom filter function (coming soon)

• Applications   (_design documents) replicate along with the
 data

• Ideal   for offline applications -- “ground computing”
                                   32
CLOUD




  33
SHOWROOM
 A cluster of couches




          34
ARCHITECTURE

• Each   cluster is a ring of nodes (Dynamo, Dynomite)

• Any    node can handle request (consistent hashing)

  • O(1), with   a hop

• nodes    own partitions (ring is divided)

• data   are distributed evenly across partitions and replicas

• mapreduce     functions are passed to nodes for execution
RESEARCH


• Google’s   MapReduce, http://bit.ly/bJbyq5

• Amazon’s   Dynamo, http://bit.ly/b7FlsN

• CAP   theorem, http://bit.ly/bERr2H
CLUSTER CONTROLS

•N   - Replication
                     Q
•Q   - Partitions = 2

•R   - Read Quorum

•W   - Write Quorum



• These   constants define the cluster
N


                                              Consistency
Throughput
                                               Durability




    N = Number of replicas per item stored in cluster
Q


Throughput                                    Scalability




     2^Q = Number of partitions (shards) in cluster
           T = Number of nodes in cluster
       2^Q / T = Number of partitions per node
R


Latency                                      Consistency




          R = Number of successful reads before
               returning value(s) to client
W


Latency                                   Durability




      W = Number of successful writes before
           returning ‘success’ to client
Load Balancer




                                Node 1

            24                                           No
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
     Y                                                      D
X                                                                    E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
request

    PUT http://boorad.cloudant.com/dbname/blah?w=2




                             Load Balancer




                                Node 1

            24                                           No
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
      Y                                                     D
X                                                                    E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
request

    PUT http://boorad.cloudant.com/dbname/blah?w=2




                             Load Balancer




                                Node 1

            24                                           No
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
      Y                                                     D
X                                                                    E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
request

    PUT http://boorad.cloudant.com/dbname/blah?w=2




                             Load Balancer




                                Node 1

            24                                           No
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
      Y                                                     D
X                        hash(blah) = E                              E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
request

    PUT http://boorad.cloudant.com/dbname/blah?w=2

                                                                                                         N=3
                                                                                                         W=2
                             Load Balancer
                                                                                                         R=2

                                Node 1

            24                                           No
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
      Y                                                     D
X                        hash(blah) = E                              E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
request

    PUT http://boorad.cloudant.com/dbname/blah?w=2

                                                                                                         N=3
                                                                                                         W=2
                             Load Balancer
                                                                                                         R=2

                                Node 1

            24                                           No
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
      Y                                                     D
X                        hash(blah) = E                              E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
request

    PUT http://boorad.cloudant.com/dbname/blah?w=2

                                                                                                         N=3
                                                                                                         W=2
                             Load Balancer
                                                                                                         R=2


            24
                                Node 1

                                                         No
                                                                                                 node down
       de                A     B     C       D              de
    No                                           B
                                                                 2
                     A
                 Z                                   C
      Y                                                     D
X                        hash(blah) = E                              E


                                                                         C       N
                                                                                  od
                                                                                     e
                                                                             D           3

                                                                                 E

                                                                                             F




                                                                                                 D



                                                                                                             No
                                                                                                             de
                                                                                                     E



                                                                                                              4
                                                                                                         F
                                                                                                             G
RESULT

• For   standalone or cluster
  •   one REST API

  •   one URL

• For   cluster
  •   redundant data

  •   distributed queries

  •   scale out

                                43
QUESTIONS?
CREDITS



• Emil    Eifrem, http://bit.ly/5D40WQ

• Sergio    Bossa, http://bit.ly/c9UoRZ

• Cliff   Moon, http://bit.ly/bX887c




                                   45

More Related Content

KEY
DevNation Atlanta
PDF
Mobile+Cloud: a viable replacement for desktop cheminformatics?
PDF
Deploying Grid Services Using Hadoop
PPTX
Storage Infrastructure Behind Facebook Messages
PDF
Storage Infrastructure Behind Facebook Messages
PPTX
Hadoop World 2011: Building Scalable Data Platforms ; Hadoop & Netezza Deploy...
PDF
Yahoo Communities Architecture Unlikely Bedfellows
PDF
Free Software and the Future of Database Technology
DevNation Atlanta
Mobile+Cloud: a viable replacement for desktop cheminformatics?
Deploying Grid Services Using Hadoop
Storage Infrastructure Behind Facebook Messages
Storage Infrastructure Behind Facebook Messages
Hadoop World 2011: Building Scalable Data Platforms ; Hadoop & Netezza Deploy...
Yahoo Communities Architecture Unlikely Bedfellows
Free Software and the Future of Database Technology

What's hot (20)

PDF
Using Spring with NoSQL databases (SpringOne China 2012)
PDF
[Hi c2011]building mission critical messaging system(guoqiang jerry)
PDF
Storage infrastructure using HBase behind LINE messages
PDF
Developing polyglot persistence applications #javaone 2012
PPTX
MongoDB at eBay
PDF
Petabyte scale on commodity infrastructure
PDF
HBase @ Twitter
PDF
Hadoop World 2011: The Hadoop Stack - Then, Now and in the Future - Eli Colli...
KEY
Learning To Relax
PDF
Hadoop Successes and Failures to Drive Deployment Evolution
PDF
What's behind facebook
PPTX
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB present...
PDF
Yahoo Pipes Middleware In The Cloud
DOC
KEY
MongoDB Case Study at NoSQL Now 2012
KEY
Big data for the rest of us
PDF
Why MariaDB?
PDF
PDF
MariaDB - a MySQL Replacement #SELF2014
PDF
Your backend architecture is what matters slideshare
Using Spring with NoSQL databases (SpringOne China 2012)
[Hi c2011]building mission critical messaging system(guoqiang jerry)
Storage infrastructure using HBase behind LINE messages
Developing polyglot persistence applications #javaone 2012
MongoDB at eBay
Petabyte scale on commodity infrastructure
HBase @ Twitter
Hadoop World 2011: The Hadoop Stack - Then, Now and in the Future - Eli Colli...
Learning To Relax
Hadoop Successes and Failures to Drive Deployment Evolution
What's behind facebook
MongoDB San Francisco 2013: Storing eBay's Media Metadata on MongoDB present...
Yahoo Pipes Middleware In The Cloud
MongoDB Case Study at NoSQL Now 2012
Big data for the rest of us
Why MariaDB?
MariaDB - a MySQL Replacement #SELF2014
Your backend architecture is what matters slideshare
Ad

Similar to NOSQL, CouchDB, and the Cloud (20)

PPTX
An Introduction to Big Data, NoSQL and MongoDB
PPTX
Drill njhug -19 feb2013
PPTX
Intro to Big Data and NoSQL
PPTX
Running MongoDB in the Cloud
PDF
Intro to NoSQL and MongoDB
PPTX
MongoDB
PPTX
Large scale computing with mapreduce
KEY
NoSQL in the context of Social Web
PPTX
Apache Drill
PDF
NoSQL on the move
PPTX
Drop acid
PPTX
Anti-social Databases
PPT
Wmware NoSQL
PPTX
001 hbase introduction
PPTX
A Survey of Advanced Non-relational Database Systems: Approaches and Applicat...
PPTX
Microsoft Openness Mongo DB
KEY
Discover MongoDB - Israel
PPTX
Lviv EDGE 2 - NoSQL
PPTX
A peek into the future
An Introduction to Big Data, NoSQL and MongoDB
Drill njhug -19 feb2013
Intro to Big Data and NoSQL
Running MongoDB in the Cloud
Intro to NoSQL and MongoDB
MongoDB
Large scale computing with mapreduce
NoSQL in the context of Social Web
Apache Drill
NoSQL on the move
Drop acid
Anti-social Databases
Wmware NoSQL
001 hbase introduction
A Survey of Advanced Non-relational Database Systems: Approaches and Applicat...
Microsoft Openness Mongo DB
Discover MongoDB - Israel
Lviv EDGE 2 - NoSQL
A peek into the future
Ad

More from boorad (11)

PPTX
Big Data Analysis Patterns with Hadoop, Mahout and Solr
PPTX
Big Data Analysis Patterns - TriHUG 6/27/2013
PPTX
Hadoop and Storm - AJUG talk
PDF
Realtime Computation with Storm
PPTX
Big Data Use Cases
PPTX
PhillyDB Talk - Beyond Batch
KEY
TriHUG - Beyond Batch
KEY
Realtime Computation with Storm
KEY
Large Scale Data Analysis Tools
KEY
DevNexus 2011
PDF
Why Erlang? - Bar Camp Atlanta 2008
Big Data Analysis Patterns with Hadoop, Mahout and Solr
Big Data Analysis Patterns - TriHUG 6/27/2013
Hadoop and Storm - AJUG talk
Realtime Computation with Storm
Big Data Use Cases
PhillyDB Talk - Beyond Batch
TriHUG - Beyond Batch
Realtime Computation with Storm
Large Scale Data Analysis Tools
DevNexus 2011
Why Erlang? - Bar Camp Atlanta 2008

Recently uploaded (20)

PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Approach and Philosophy of On baking technology
PDF
KodekX | Application Modernization Development
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PPT
Teaching material agriculture food technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Electronic commerce courselecture one. Pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
NewMind AI Weekly Chronicles - August'25 Week I
20250228 LYD VKU AI Blended-Learning.pptx
Review of recent advances in non-invasive hemoglobin estimation
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Approach and Philosophy of On baking technology
KodekX | Application Modernization Development
Reach Out and Touch Someone: Haptics and Empathic Computing
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Teaching material agriculture food technology
Encapsulation_ Review paper, used for researhc scholars
Mobile App Security Testing_ A Comprehensive Guide.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Digital-Transformation-Roadmap-for-Companies.pptx
The AUB Centre for AI in Media Proposal.docx
Electronic commerce courselecture one. Pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Empathic Computing: Creating Shared Understanding
Agricultural_Statistics_at_a_Glance_2022_0.pdf

NOSQL, CouchDB, and the Cloud

  • 1. NOSQL, COUCHDB AND THE CLOUD Brad Anderson Cloudant 1
  • 2. BRAD ANDERSON • BS Hotel Management • Restaurant Chain Data - econometric modeling, BI/DW • Open Source - trac, dsource.org, couchdb • NOSQLEast 2009 • Cloudant • http://twitter.com/boorad 2
  • 3. AGENDA • NOSQL • COUCHDB • Erlang • Cloud • Dynamo • MapReduce 3
  • 5. RELATIONAL DATABASES RDBMS • Rigid Schema / ORM fun 1970-2009 • Scalability • Everything is a Nail http://www.flickr.com/photos/36041246@N00/3419197777/ 5
  • 6. MASTER-SLAVE • Master-Slave Replication • One (and only one) master • One or more slaves • All writes go to the master, replicated to slaves • Reads balanced among master and slaves • Issues • single point of failure • single point of bottleneck • static topology 6
  • 7. MASTER-MASTER • Master-Master Replication • One or more masters • Writes and reads can go to any master • Writes are replicated among masters • Issues • limited performance and scalability (typically due to 2PC) • complexity • static topology 7
  • 8. VERTICAL PARTITION • Vertical Partitioning • Put tables belonging to different functional areas on different database nodes • Scale data & load by function • Move joins to the application level • Issues • no longer truly relational • a functional area grows too much 8
  • 9. HORIZONTAL PARTITION • Horizontal Partitioning • Split tables by key and put partitions (shards) on different nodes • Scale data & load by key • Move joins to the application level • Issues • no longer truly relational • a partition grows too much 9
  • 10. CACHING • Put a cache in front of your database • Distribute • Write-through for scaling reads • Write-behind for scaling reads and writes • Issues • “only” scales read/write load • invalidation 10
  • 12. NOSQL NOT ONLY SQL A moniker for different data storage systems solving very different problems, all where a relational database is not the right fit. 12
  • 13. RIGHT FIT • Google indexes 400 Pb / day (2007) • CERN, LHC generates 100 Pb / sec • Unique data created each year (IDC, 2007) • 2007 40 Eb • 2010 988 Eb (exponential growth) 13
  • 14. FOUR CATEGORIES • Key/Value Stores • Dynomite, Voldemort, Tokyo • Document Stores • CouchDB, MongoDB • Column Stores / BigTable • HBase, Hypertable • Graph Databases • Neo4j, AllegroGraph, VertexDB 14
  • 15. BIG TAKEAWAY function function data function function data data function function data data data data data data data data function function data data data data data data function function data data function data Bring the function to the data 15
  • 16. 16
  • 17. HUH? ERLANG? • Programming Language created at Ericsson (20 yrs old now) • Designed for scalable, long-lived systems • Compiled, Functional, Dynamically Typed, Open Source 17
  • 18. 3 BIGGIES • Massively Concurrent • green threads, very lightweight != os threads • Seamlessly Distributed • node = os thread = VM, processes can live anywhere • Fault Tolerant • 99.9999999 = 32ms downtime per year - AXD301 18
  • 19. Of fi cia lB et a! CouchDB Apache 19
  • 20. COUCHDB • Schema-free document database server • Robust, highly concurrent, fault-tolerant • RESTful JSON API • Futon web admin console • MapReduce system for generating custom views • Bi-directional incremental replication • couchapp: lightweight HTML+JavaScript apps served directly from CouchDB using views to transform JSON 20
  • 21. FROM INTEREST TO ADOPTION • 100+ production users • Active commercial •3 development books being written • Rapidly maturing • Vibrant, open community 21
  • 22. OF THE WEB Django may be built for the Web, but CouchDB is built of the Web. I've never seen software that so completely embraces the philosophies behind HTTP ... this is what the software of the future looks like. Jacob Kaplan-Moss October 17 2007 http://jacobian.org/writing/of-the-web/ 22
  • 23. DOCUMENTS • Documents are JSON Objects • Underscore-prefixed fields are reserved • Documents can have binary attachments • MVCC _rev deterministically generated from doc content 23
  • 24. ROBUST • Never overwrite previously committed data • In the event of a server crash or power failure, just restart CouchDB -- there is no “repair” • Take snapshots with “cp” • Configurable levels of durability: can choose to fsync after every update, or less often to gain better throughput 24
  • 25. CONCURRENT • Erlang approach: lightweight processes to model the natural concurrency in a problem • For CouchDB that means one process per TCP connection • Lock-free architecture; each process works with an MVCC snapshot of a DB. • Performance degrades gracefully under heavy concurrent load 25
  • 26. REST API • Create PUT /mydb/mydocid • Retrieve GET /mydb/mydocid • Update PUT /mydb/mydocid • Delete DELETE /mydb/mydocid 26
  • 27. 27
  • 28. VIEWS • Custom, persistent representations of document data • “Closeto the metal” -- no dynamic queries in production, so you know exactly what you’re getting • Generated using MapReduce functions written in JavaScript (and other languages) view must have a map function and may also have a • Each reduce function • Leverages view collation, rich view query API 28
  • 31. INCREMENTAL • Computing a view can be expensive, so CouchDB saves the result in a B-tree and keeps it up-to-date • Leafnodes store map results, inner nodes store reductions of children http://horicky.blogspot.com/2008/10/couchdb-implementation.html 31
  • 32. REPLICATION • Peer-based, bi-directional replication using normal HTTP calls • Mediated by a replicator process which can live on the source, target, or somewhere else entirely • Replicate a subset of documents in a DB meeting criteria defined in a custom filter function (coming soon) • Applications (_design documents) replicate along with the data • Ideal for offline applications -- “ground computing” 32
  • 34. SHOWROOM A cluster of couches 34
  • 35. ARCHITECTURE • Each cluster is a ring of nodes (Dynamo, Dynomite) • Any node can handle request (consistent hashing) • O(1), with a hop • nodes own partitions (ring is divided) • data are distributed evenly across partitions and replicas • mapreduce functions are passed to nodes for execution
  • 36. RESEARCH • Google’s MapReduce, http://bit.ly/bJbyq5 • Amazon’s Dynamo, http://bit.ly/b7FlsN • CAP theorem, http://bit.ly/bERr2H
  • 37. CLUSTER CONTROLS •N - Replication Q •Q - Partitions = 2 •R - Read Quorum •W - Write Quorum • These constants define the cluster
  • 38. N Consistency Throughput Durability N = Number of replicas per item stored in cluster
  • 39. Q Throughput Scalability 2^Q = Number of partitions (shards) in cluster T = Number of nodes in cluster 2^Q / T = Number of partitions per node
  • 40. R Latency Consistency R = Number of successful reads before returning value(s) to client
  • 41. W Latency Durability W = Number of successful writes before returning ‘success’ to client
  • 42. Load Balancer Node 1 24 No de A B C D de No B 2 A Z C Y D X E C N od e D 3 E F D No de E 4 F G
  • 43. request PUT http://boorad.cloudant.com/dbname/blah?w=2 Load Balancer Node 1 24 No de A B C D de No B 2 A Z C Y D X E C N od e D 3 E F D No de E 4 F G
  • 44. request PUT http://boorad.cloudant.com/dbname/blah?w=2 Load Balancer Node 1 24 No de A B C D de No B 2 A Z C Y D X E C N od e D 3 E F D No de E 4 F G
  • 45. request PUT http://boorad.cloudant.com/dbname/blah?w=2 Load Balancer Node 1 24 No de A B C D de No B 2 A Z C Y D X hash(blah) = E E C N od e D 3 E F D No de E 4 F G
  • 46. request PUT http://boorad.cloudant.com/dbname/blah?w=2 N=3 W=2 Load Balancer R=2 Node 1 24 No de A B C D de No B 2 A Z C Y D X hash(blah) = E E C N od e D 3 E F D No de E 4 F G
  • 47. request PUT http://boorad.cloudant.com/dbname/blah?w=2 N=3 W=2 Load Balancer R=2 Node 1 24 No de A B C D de No B 2 A Z C Y D X hash(blah) = E E C N od e D 3 E F D No de E 4 F G
  • 48. request PUT http://boorad.cloudant.com/dbname/blah?w=2 N=3 W=2 Load Balancer R=2 24 Node 1 No node down de A B C D de No B 2 A Z C Y D X hash(blah) = E E C N od e D 3 E F D No de E 4 F G
  • 49. RESULT • For standalone or cluster • one REST API • one URL • For cluster • redundant data • distributed queries • scale out 43
  • 51. CREDITS • Emil Eifrem, http://bit.ly/5D40WQ • Sergio Bossa, http://bit.ly/c9UoRZ • Cliff Moon, http://bit.ly/bX887c 45

Editor's Notes

  • #18: 20 yrs old, open source since mid-90’s, iirc. like a mobile telephone grid compiled (but to bytecode for a VM) open source
  • #19: Why Erlang? Here are my three big ticket items - massively concurrent - seamlessly distributed into multi-machine clusters - extremely fault tolerant Great for my projects - data storage & retrieval - scalable web apps Maybe not so hot for computationally intensive projects - unless they lend themselves to parallelism