SlideShare una empresa de Scribd logo
1 de 36
PUTTING THE X FACTOR INTO
              CASSANDRA:
  ADVENTURES IN COUNTING
                  MALCOLM BOX, CTO, LIVE TALKBACK
       BIG DATA LONDON MEETUP, 18TH JANUARY 2012



                                                    1
INTRO
  Malcolm Box, CTO & Co-Founder

  @malcolmbox

  malcolm@tellybug.com

  http://tellybug.com




                                  2
WHAT WE DID FOR X FACTOR




                           2
X-FACTOR: THE RESULTS




                        4
X-FACTOR: THE RESULTS
  Over 1 Million app downloads




                                 4
X-FACTOR: THE RESULTS
  Over 1 Million app downloads




  Over 260 Million boos/claps




                                 4
X-FACTOR: THE RESULTS
  Over 1 Million app downloads




  Over 260 Million boos/claps




  Massive peak loads on CTA




                                 4
BUT SURELY COUNTING IS EASY?
  Need real time results

     How many boos?

     How many claps?

     Rate of boos

     Rate of claps

  Design for scale

     Goal of handling 10K per second coming into our servers




                                                               5
DISTRIBUTED COUNTING
  “Hey, my CPU can do 22305 MIPS!”

  “Stick it in Memcache!”

  “How about Redis?”

  “OK, how about sharding?”

  “Well, I hear Cassandra 0.8 has counters”




                                              6
MEMCACHE CAN’T COUNT




                       -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)




                        -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)




                         -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L




                         -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L

  cache.decr('key', 1)




                         -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L

  cache.decr('key', 1)

  >>> 0L




                         -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L

  cache.decr('key', 1)

  >>> 0L

  cache.incr('key', -1)




                          -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L

  cache.decr('key', 1)

  >>> 0L

  cache.incr('key', -1)

  >>> 4294967295L




                          -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L

  cache.decr('key', 1)

  >>> 0L

  cache.incr('key', -1)

  >>> 4294967295L

  cache.incr('key', 1)




                          -1
MEMCACHE CAN’T COUNT
  cache.set('key', 1)

  cache.decr('key', 1)

  >>> 0L

  cache.decr('key', 1)

  >>> 0L

  cache.incr('key', -1)

  >>> 4294967295L

  cache.incr('key', 1)

  >>> 4294967296L


                          -1
MEMCACHE CAN’T COUNT PART 3




                              8
MEMCACHE CAN’T COUNT PART 3
  EC2 limits

     Single Memcache server runs out of network I/O

     What then?




                                                      8
MEMCACHE CAN’T COUNT PART 3
  EC2 limits

     Single Memcache server runs out of network I/O

     What then?

  Redis?

     Benchmarked on EC2

     m1.large -> m1.large, 28K INCR/s

     Network I/O limited

     Can’t horizontally scale


                                                      8
SHARDED COUNTERS
  Implemented 2 level cache on web tier (https://gist.github.com/953524)

  But a counter is more complicated

  Sharded counter

     Store (count, delta, timestamp) locally

     Store count in L2 cache

     Increment changes local delta

     Push deltas to central every N seconds & refresh count

  Eventually consistent

     Maybe....unless something crashes


                                                                           9
CASSANDRA HAS COUNTERS
  New feature in Cassandra 0.8

  Special column type - CounterColumnType as the validator

  Distributed 64 bit counter, with eventual consistency

     CL.ONE writes recommended to avoid implicit reads impacting performance

     Reads tot up values from replicas to give value

  Simple functionality

     incr()/decr(), get()




                                                                               10
CAN CASSANDRA COUNT?




                       11
CAN CASSANDRA COUNT?
  Yes, But....




                       11
CAN CASSANDRA COUNT?
  Yes, But....

  Performance can suck

     Switch off replicate_on_write, tune RF & cluster size




                                                             11
CAN CASSANDRA COUNT?
  Yes, But....

  Performance can suck

     Switch off replicate_on_write, tune RF & cluster size

  Not scalable

     Scales as function of RF up to 4 nodes

     Above that ... you’re out of luck

     Best we achieved is ~10K/s increments to single counter value




                                                                     11
CAN CASSANDRA COUNT?
  Yes, But....

  Performance can suck

     Switch off replicate_on_write, tune RF & cluster size

  Not scalable

     Scales as function of RF up to 4 nodes

     Above that ... you’re out of luck

     Best we achieved is ~10K/s increments to single counter value

  What do you do if an operation fails?


                                                                     11
CASSANDRA - MAKE IT COUNT *FASTER*
  Recommendation (from Cassandra committers...):




                                                   12
CASSANDRA - MAKE IT COUNT *FASTER*
  Recommendation (from Cassandra committers...):




           SHARD YOUR COUNTERS




                                                   12
YOU’RE NOT COUNTING IT RIGHT




                               13
YOU’RE NOT COUNTING IT RIGHT
  When 1+1+1 is 2




                               13
YOU’RE NOT COUNTING IT RIGHT
  When 1+1+1 is 2




  Write Only Databases




                               13
CONCLUSION
  Counting is easy.....

  Unless you want to do it really, really fast



  If you’re inside the I/O limits for a single box, all is peachy



  Above that, there’s no good off the shelf answers




                                                                    14
ANY QUESTIONS?


      We’re hiring - if you’re interested in helping us count, get in touch!

                            malcolm@tellybug.com

                                 @malcolmbox




                                                                               15

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Kafka Summit NYC 2017 - Running Hundreds of Kafka Clusters with 5 People
Kafka Summit NYC 2017 - Running Hundreds of Kafka Clusters with 5 PeopleKafka Summit NYC 2017 - Running Hundreds of Kafka Clusters with 5 People
Kafka Summit NYC 2017 - Running Hundreds of Kafka Clusters with 5 People
 
C* Summit EU 2013: Practice Makes Perfect: Extreme Cassandra Optimization
C* Summit EU 2013: Practice Makes Perfect: Extreme Cassandra OptimizationC* Summit EU 2013: Practice Makes Perfect: Extreme Cassandra Optimization
C* Summit EU 2013: Practice Makes Perfect: Extreme Cassandra Optimization
 
Advanced percona xtra db cluster in a nutshell... la suite plsc2016
Advanced percona xtra db cluster in a nutshell... la suite plsc2016Advanced percona xtra db cluster in a nutshell... la suite plsc2016
Advanced percona xtra db cluster in a nutshell... la suite plsc2016
 
Percon XtraDB Cluster in a nutshell
Percon XtraDB Cluster in a nutshellPercon XtraDB Cluster in a nutshell
Percon XtraDB Cluster in a nutshell
 
Cassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A ComparisonCassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A Comparison
 
Galera explained 3
Galera explained 3Galera explained 3
Galera explained 3
 
Galera Replication Demystified: How Does It Work?
Galera Replication Demystified: How Does It Work?Galera Replication Demystified: How Does It Work?
Galera Replication Demystified: How Does It Work?
 
Low level java programming
Low level java programmingLow level java programming
Low level java programming
 
GC free coding in @Java presented @Geecon
GC free coding in @Java presented @GeeconGC free coding in @Java presented @Geecon
GC free coding in @Java presented @Geecon
 
Lambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter LawreyLambdas puzzler - Peter Lawrey
Lambdas puzzler - Peter Lawrey
 
Python and cassandra
Python and cassandraPython and cassandra
Python and cassandra
 
Determinism in finance
Determinism in financeDeterminism in finance
Determinism in finance
 
Plmce2k15 15 tips galera cluster
Plmce2k15   15 tips galera clusterPlmce2k15   15 tips galera cluster
Plmce2k15 15 tips galera cluster
 
How to Fail at Kafka
How to Fail at KafkaHow to Fail at Kafka
How to Fail at Kafka
 
Writing and testing high frequency trading engines in java
Writing and testing high frequency trading engines in javaWriting and testing high frequency trading engines in java
Writing and testing high frequency trading engines in java
 
Galera Cluster - Node Recovery - Webinar slides
Galera Cluster - Node Recovery - Webinar slidesGalera Cluster - Node Recovery - Webinar slides
Galera Cluster - Node Recovery - Webinar slides
 
Deterministic behaviour and performance in trading systems
Deterministic behaviour and performance in trading systemsDeterministic behaviour and performance in trading systems
Deterministic behaviour and performance in trading systems
 
How to understand Galera Cluster - 2013
How to understand Galera Cluster - 2013How to understand Galera Cluster - 2013
How to understand Galera Cluster - 2013
 
High Frequency Trading and NoSQL database
High Frequency Trading and NoSQL databaseHigh Frequency Trading and NoSQL database
High Frequency Trading and NoSQL database
 
Advanced Operations
Advanced OperationsAdvanced Operations
Advanced Operations
 

Similar a Big data meetup 2012 01-18 - stripped

Growing Up MongoDB
Growing Up MongoDBGrowing Up MongoDB
Growing Up MongoDB
MongoDB
 

Similar a Big data meetup 2012 01-18 - stripped (20)

Cassandra EU 2012 - Putting the X Factor into Cassandra
Cassandra EU 2012 - Putting the X Factor into CassandraCassandra EU 2012 - Putting the X Factor into Cassandra
Cassandra EU 2012 - Putting the X Factor into Cassandra
 
Scylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of Scylla
 
Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey Low latency in java 8 by Peter Lawrey
Low latency in java 8 by Peter Lawrey
 
The Do’s and Don’ts of Benchmarking Databases
The Do’s and Don’ts of Benchmarking DatabasesThe Do’s and Don’ts of Benchmarking Databases
The Do’s and Don’ts of Benchmarking Databases
 
Performance Tipping Points - Hitting Hardware Bottlenecks
Performance Tipping Points - Hitting Hardware BottlenecksPerformance Tipping Points - Hitting Hardware Bottlenecks
Performance Tipping Points - Hitting Hardware Bottlenecks
 
Intro to cassandra
Intro to cassandraIntro to cassandra
Intro to cassandra
 
C* Summit 2013: Cassandra at Instagram by Rick Branson
C* Summit 2013: Cassandra at Instagram by Rick BransonC* Summit 2013: Cassandra at Instagram by Rick Branson
C* Summit 2013: Cassandra at Instagram by Rick Branson
 
Austin Cassandra Meetup re: Atomic Counters
Austin Cassandra Meetup re: Atomic CountersAustin Cassandra Meetup re: Atomic Counters
Austin Cassandra Meetup re: Atomic Counters
 
Low latency in java 8 v5
Low latency in java 8 v5Low latency in java 8 v5
Low latency in java 8 v5
 
Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svcc
 
Scaling opensimulator inventory using nosql
Scaling opensimulator inventory using nosqlScaling opensimulator inventory using nosql
Scaling opensimulator inventory using nosql
 
Long live to CMAN!
Long live to CMAN!Long live to CMAN!
Long live to CMAN!
 
Stampede con 2014 cassandra in the real world
Stampede con 2014   cassandra in the real worldStampede con 2014   cassandra in the real world
Stampede con 2014 cassandra in the real world
 
Running 400-node Cassandra + Spark Clusters in Azure (Anubhav Kale, Microsoft...
Running 400-node Cassandra + Spark Clusters in Azure (Anubhav Kale, Microsoft...Running 400-node Cassandra + Spark Clusters in Azure (Anubhav Kale, Microsoft...
Running 400-node Cassandra + Spark Clusters in Azure (Anubhav Kale, Microsoft...
 
Reactor, Reactive streams and MicroServices
Reactor, Reactive streams and MicroServicesReactor, Reactive streams and MicroServices
Reactor, Reactive streams and MicroServices
 
Run Your Business 6X Faster at Lower Costs!
Run Your Business 6X Faster at Lower Costs!Run Your Business 6X Faster at Lower Costs!
Run Your Business 6X Faster at Lower Costs!
 
Growing Up MongoDB
Growing Up MongoDBGrowing Up MongoDB
Growing Up MongoDB
 
Apache Cassandra Lunch #96: Apache Cassandra Change Data Capture (CDC) Strate...
Apache Cassandra Lunch #96: Apache Cassandra Change Data Capture (CDC) Strate...Apache Cassandra Lunch #96: Apache Cassandra Change Data Capture (CDC) Strate...
Apache Cassandra Lunch #96: Apache Cassandra Change Data Capture (CDC) Strate...
 
Lessons learnt on a 2000-core cluster
Lessons learnt on a 2000-core clusterLessons learnt on a 2000-core cluster
Lessons learnt on a 2000-core cluster
 
XT Best Practices
XT Best PracticesXT Best Practices
XT Best Practices
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 

Big data meetup 2012 01-18 - stripped

  • 1. PUTTING THE X FACTOR INTO CASSANDRA: ADVENTURES IN COUNTING MALCOLM BOX, CTO, LIVE TALKBACK BIG DATA LONDON MEETUP, 18TH JANUARY 2012 1
  • 2. INTRO Malcolm Box, CTO & Co-Founder @malcolmbox malcolm@tellybug.com http://tellybug.com 2
  • 3. WHAT WE DID FOR X FACTOR 2
  • 5. X-FACTOR: THE RESULTS Over 1 Million app downloads 4
  • 6. X-FACTOR: THE RESULTS Over 1 Million app downloads Over 260 Million boos/claps 4
  • 7. X-FACTOR: THE RESULTS Over 1 Million app downloads Over 260 Million boos/claps Massive peak loads on CTA 4
  • 8. BUT SURELY COUNTING IS EASY? Need real time results How many boos? How many claps? Rate of boos Rate of claps Design for scale Goal of handling 10K per second coming into our servers 5
  • 9. DISTRIBUTED COUNTING “Hey, my CPU can do 22305 MIPS!” “Stick it in Memcache!” “How about Redis?” “OK, how about sharding?” “Well, I hear Cassandra 0.8 has counters” 6
  • 11. MEMCACHE CAN’T COUNT cache.set('key', 1) -1
  • 12. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) -1
  • 13. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L -1
  • 14. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L cache.decr('key', 1) -1
  • 15. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L cache.decr('key', 1) >>> 0L -1
  • 16. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L cache.decr('key', 1) >>> 0L cache.incr('key', -1) -1
  • 17. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L cache.decr('key', 1) >>> 0L cache.incr('key', -1) >>> 4294967295L -1
  • 18. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L cache.decr('key', 1) >>> 0L cache.incr('key', -1) >>> 4294967295L cache.incr('key', 1) -1
  • 19. MEMCACHE CAN’T COUNT cache.set('key', 1) cache.decr('key', 1) >>> 0L cache.decr('key', 1) >>> 0L cache.incr('key', -1) >>> 4294967295L cache.incr('key', 1) >>> 4294967296L -1
  • 21. MEMCACHE CAN’T COUNT PART 3 EC2 limits Single Memcache server runs out of network I/O What then? 8
  • 22. MEMCACHE CAN’T COUNT PART 3 EC2 limits Single Memcache server runs out of network I/O What then? Redis? Benchmarked on EC2 m1.large -> m1.large, 28K INCR/s Network I/O limited Can’t horizontally scale 8
  • 23. SHARDED COUNTERS Implemented 2 level cache on web tier (https://gist.github.com/953524) But a counter is more complicated Sharded counter Store (count, delta, timestamp) locally Store count in L2 cache Increment changes local delta Push deltas to central every N seconds & refresh count Eventually consistent Maybe....unless something crashes 9
  • 24. CASSANDRA HAS COUNTERS New feature in Cassandra 0.8 Special column type - CounterColumnType as the validator Distributed 64 bit counter, with eventual consistency CL.ONE writes recommended to avoid implicit reads impacting performance Reads tot up values from replicas to give value Simple functionality incr()/decr(), get() 10
  • 26. CAN CASSANDRA COUNT? Yes, But.... 11
  • 27. CAN CASSANDRA COUNT? Yes, But.... Performance can suck Switch off replicate_on_write, tune RF & cluster size 11
  • 28. CAN CASSANDRA COUNT? Yes, But.... Performance can suck Switch off replicate_on_write, tune RF & cluster size Not scalable Scales as function of RF up to 4 nodes Above that ... you’re out of luck Best we achieved is ~10K/s increments to single counter value 11
  • 29. CAN CASSANDRA COUNT? Yes, But.... Performance can suck Switch off replicate_on_write, tune RF & cluster size Not scalable Scales as function of RF up to 4 nodes Above that ... you’re out of luck Best we achieved is ~10K/s increments to single counter value What do you do if an operation fails? 11
  • 30. CASSANDRA - MAKE IT COUNT *FASTER* Recommendation (from Cassandra committers...): 12
  • 31. CASSANDRA - MAKE IT COUNT *FASTER* Recommendation (from Cassandra committers...): SHARD YOUR COUNTERS 12
  • 32. YOU’RE NOT COUNTING IT RIGHT 13
  • 33. YOU’RE NOT COUNTING IT RIGHT When 1+1+1 is 2 13
  • 34. YOU’RE NOT COUNTING IT RIGHT When 1+1+1 is 2 Write Only Databases 13
  • 35. CONCLUSION Counting is easy..... Unless you want to do it really, really fast If you’re inside the I/O limits for a single box, all is peachy Above that, there’s no good off the shelf answers 14
  • 36. ANY QUESTIONS? We’re hiring - if you’re interested in helping us count, get in touch! malcolm@tellybug.com @malcolmbox 15

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. redis - what if you need 30K/s?\n\n
  19. redis - what if you need 30K/s?\n\n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. reveal - “shard your counters”\n
  27. 1+1+1 = 2 - eventual consistency. Cache consistency\n\nWrite only DB - Cassandra bug where get_range() wasn’t returning all the data in the DB.\n
  28. 1+1+1 = 2 - eventual consistency. Cache consistency\n\nWrite only DB - Cassandra bug where get_range() wasn’t returning all the data in the DB.\n
  29. single box - failures?\nCass counters don’t scale :(\n
  30. \n