SlideShare a Scribd company logo
Introducing ValuStor:
Memcached Alternative for Scylla
Derek Ramsey
Software Engineering Manager, Sensaphone
Who Am I?
Software Engineering Manager at Sensaphone
Developer and maintainer of ValuStor
Added ~33,000 county/city articles to Wikipedia
Avid nature photographer
Father of 5 children
INTRO TO VALUSTOR
What is ValuStor?
Key-value and document store NoSQL database
Header-only C++ abstraction layer
Replacement for memcached
MIT License
History
Memcached as MySQL cache
▪ 100’s of simultaneous connections
• Batched writes bought time
▪ No redundancy or scalability
▪ Cold cache performance risk
Took three days from inception to production
▪ No critical bugs
Success! Interest! … Open source it!
(Usage Guide on github)
Memcached
Often installed on client machines
Memcached FAQ
▪ Not recommended for sessions
▪ Minimal Security: Only SASL authentication
▪ No failover, replication, or persistence
▪ Must use batching for performance
FEATURES
ValuStor Features: Client
▪ Ease of use
▪ Abstraction
▪ Multiple Data Types
• Integers (bool, 8-, 16-, 32-, 64-bit)
• Floating Point
• String
• JSON (nlohmann::json)
• Blob / Bytes
• UUID
▪ Client-side write queue (backlog)
▪ Automatic Adaptive Consistency
ValuStor Features: Driver
Thread safety
Multi-threading
Connection Control
Server Selection
ValuStor Features: Server
Architectural Advantages
▪ Performance
▪ Security
▪ Fault Tolerance
• Reliability
• Redundancy
• Availability
▪ Scalability
Performance
Can a persistent DB compete with
RAM-only caching?
Async I/O
▪ < 1ms latency possible
Caching
▪ Cold cache penalty
▪ Cache warming (heat-weighted load balancing)
Security
ValuStor and Scylla
▪ TLS
• Client certificate authentication
• Server cert verification
• Domain or IP
• Inter- and intra-DC encryption
▪ Password Authentication
Memcached
▪ Vulnerable by design
• CVE-2018-1000115
• DoS in UDP Protocol
• Solution: disable UDP by default
• CVE-2017-9951
• DoS overflow
• CVE-2016-8704/8705/8706
• Exec Code Overflow
Fault Tolerance: Reliability
The database is offline, panic!
Client-side write queue
▪ Put failed writes into a backlog queue
• Automatic retry
• Backlog clears when database returns
• Modes: Allow, Only Use, Don’t Use
▪ Producers continue producing
• Writes are delayed, not lost
Fault Tolerance: Redundancy
Custom data replication factor
▪ Configurable per keyspace (“database”)
▪ Can be changed on-the-fly
▪ Client aware
Multi-datacenter support
▪ Data replication factor per keyspace and per data center
▪ Client aware
Fault Tolerance: Availability
CAP Theorem
▪ Consistency, Availability, Partition tolerance
C and P
▪ Redis
▪ MongoDB
Quorum Problem
▪ Must have N/2 + 1 active nodes
▪ Fragile multi-datacenter setups
Quorum Problem: Example 1
Quorum requires three nodes.
Quorum Problem: Example 1
Quorum Problem: Example 2
Quorum now requires four nodes.
Quorum Problem: Example 2
The primary DC goes down…
...and a backup DC takes over.
Quorum Problem: Example 2
Both secondary DC are down...
...the primary loses quorum!
Fault Tolerance: Availability
Solution: Automatic Adaptive Consistency
▪ Eventual Consistency
▪ Tunable Consistency
▪ Adaptively downgrade on retry
• Likelihood of inconsistency can be low or limited
▪ Bonus: Hinted Handoff
Adaptive Consistency: Writes
Data is written to all nodes.
If two nodes go down…
...just keep going!
Data on the remaining node is still consistent*
Adaptive Consistency: Writes
Data is written to all nodes.
If two nodes go down…
...just keep going!
Data on the remaining node is still consistent*
* If you used consistency mode ALL
Adaptive Consistency: Writes
ALL: Writes confirmed on every node
QUORUM: Some recent writes can be lost
ANY: At least it went somewhere… (e.g. Domain Name System)
Adaptive Consistency: Reads
ALL: Always consistent
QUORUM: Might be inconsistent [after node failure]
ANY: At least you get something…
Automatically or manually fix inconsistencies
Scalability
Scylla architecture has (almost) ∞ scalability
▪ Sharding per core: just add more
▪ Driver is sharding-aware
Memcached
▪ Physically limited
▪ Must shard manually
USING VALUSTOR
ValuStor Configuration
// e.g. CREATE TABLE cache.values (key bigint, value text, PRIMARY KEY (k1))
ValuStor::ValuStor<std::string, int64_t> store({
{"table", "cache.values"},
{"key_field", "key"},
{"value_field", "value"},
{"hosts", "127.0.0.1"}
});
ValuStor Usage
Example
// e.g. CREATE TABLE cache.values (key_field bigint, value_field text, PRIMARY KEY (key_field))
//
// <value> <key>
ValuStor::ValuStor<std::string, int64_t> vs("example.conf");
auto store_result = vs.store(1234, "value");
if(store_result){
auto retrieve_result = vs.retrieve(1234);
if(retrieve_result){
std::cout << 1234 << " => " << result.data << std::endl;
}
}
COMPARISONS
Key-Value NoSQL Comparison
ValuStor Memcached Redis Riak KV* DynamoDB
TLS Support
Persistence
Multi-Master Replication
Multi-DC Replication
FOSS
Language C++ C C Erlang Cloud Based
Complexity Simple Simple Complex Complex Complex
*Open-source / community version
What about Redis?
▪ It’s more complex*
▪ May not perform as well
▪ Only master-slave replication
▪ Commons Clause modules
Replace with Pedis
▪ Uses SEASTAR for I/O
...or use ValuStor
* This may be desired
What about MongoDB or CouchDB?
Use Case: JSON document store
#include "nlohmann/json.hpp"
#include "ValuStor.hpp"
…
ValuStor::ValuStor<nlohmann::json, int64_t> docstore("example.conf");
std::string raw_json = "{"key":"value"}";
auto json = nlohmann::json::parse(raw_json);
docstore.store(document_id, document);
auto result = docstore.retrieve(document_id);
if(result){
raw_json = result.data.dump();
}
FUTURE
Future
Beyond C/C++
▪ SWIG Bindings (www.swig.org)
• Current: PHP, Python, Perl
• Future: C#, D, Go, Java, Javascript, Ruby
▪ Command line utilities
New Features
▪ Performance enhancement
• Futures
▪ Non-template version
Thank You
Any Questions ?
Please stay in touch
dramsey@sensaphone.com
@ThyRamMan
github.com/Sensaphone/ValuStor
ANSWERS TO QUESTIONS
What is ValuStor?
Client Driver Database
Ease of Use Multi-Threading Persistence
Abstraction Layer Thread Safety High Availability
Type Flexibility Server Selection Redundancy
Backlog Write Queue Connection Control Scalability
Adaptive Consistency Security Security
Performance
Why Scylla?
Eventually consistent persistent NoSQL database
Efficient, close-to-the-hardware design
Consistent, low-latency performance
▪ C++
▪ Asynchronous I/O
▪ Userspace I/O scheduler
▪ Shared per core
Caveats and Limitations
Atomicity
▪ Writes are atomic, but not ordered
• Requires minimum QUORUM consistency
▪ No read-and-write operations or ACID transactions
Cost
▪ RAM for memcached relatively cheap
▪ Additional Maintenance
Memcached evicts data, Scylla does not
▪ May need more RAM or effective use of TTL
ValuStor Installation
Dependencies
▪ C++11 compiler
▪ Cassandra C/C++ client driver
• “libssl” and “libuv” libraries
• https://github.com/datastax/cpp-driver/releases
▪ Scylla
• https://docs.scylladb.com/getting-started/
ValuStor Installation
Include the ValuStor header file.
#include "ValuStor.hpp"
Have “cassandra.h” in the include path.
Link with “libcassandra.so” and pthread.
ValuStor API
// TEMPLATE
template<typename Val_T, typename Key_T...> class ValuStor
// CONSTRUCTORS
ValuStor( std::string config_file )
ValuStor( std::map<std::string, std::string> configuration_kvp )
// API
Result store( Key_T... keys,
Val_T value,
uint32_t seconds_ttl = 0,
InsertMode_t insert_mode = ValuStor::DEFAULT_BACKLOG_MODE,
int64_t microseconds_since_epoch = 0 )
Result retrieve( Key_T... keys,
size_t key_count = 0)
ValuStor Configuration
ValuStor::ValuStor<std::string, int64_t> store({
...
{"username", "username"},
{"password", "password"},
{"server_trusted_cert", "/path/to/ca.pem"},
{"server_verify_mode", "3"},
{"client_ssl_cert", "/path/to/client.crt"},
{"client_ssl_key", "/path/to/client.key"},
{"client_key_password", "password"}
});
ValuStor Usage
Comparison: Reads
// libmemcached
std::string key = "key to find";
memcached_return rc;
size_t value_length = 0;
uint32_t flags = 0;
char* result = memcached_get(memc, key.c_str(), key.size(), &value_length, &flags, &rc);
if(rc == MEMCACHED_SUCCESS){ std::string value_found(result); }
else{ std::string error_message(memcached_last_error_message(memc)); }
// ValuStor
auto result = store.retrieve("key to find");
if(result){ std::string value_found = result.data; }
else{ std::string error_message = result.result_message; }
ValuStor Usage
Comparison: Multiple Reads
// libmemcached
// Won’t fit on the slide
// ValuStor
std::vector<std::string> keys = {"key1", "key2", "key3"};
for(auto& key : keys){
auto result = store.retrieve(key);
if(result){
std::string val = result.data;
...
}
}
ValuStor Usage
Comparison: Writes
// libmemcached
std::string key = "key to use";
std::string value = "value to write";
time_t expiration = time(nullptr) + 1000; // or '0' for no expiration
memcached_return rc = memcached_set(memc, key_to_use.c_str(), key_to_use.size(), value.c_str(), value.size(),
expiration_time, 0);
// ValuStor
auto result = store.store("key to use", "value to write", 1000); // or '0' for no expiration
Scylla Database Administration
Creating keyspaces
▪ CREATE KEYSPACE space WITH replication = {'class':'NetworkTopologyStrategy', 'DC1':3, 'DC2':1}
Creating tables
▪ CREATE TABLE space.mytable (mykey bigint PRIMARY KEY, myval text)
Configuration
▪ Password authentication
▪ TLS
Multiple nodes / data centers
Compound Keys
Partition Key
▪ Must be completely specified on queries
▪ Data is stored on disk in Partition Key chunks
Clustering Key
▪ May be conditionally specified on queries
▪ Allows querying of multiple records
Example:
▪ PRIMARY KEY ((key1, key2,...,keyN), keyB, keyC, …, keyZ)

More Related Content

What's hot

Scylla Summit 2016: Scylla at Samsung SDS
Scylla Summit 2016: Scylla at Samsung SDSScylla Summit 2016: Scylla at Samsung SDS
Scylla Summit 2016: Scylla at Samsung SDS
ScyllaDB
 
Seastar / ScyllaDB, or how we implemented a 10-times faster Cassandra
Seastar / ScyllaDB,  or how we implemented a 10-times faster CassandraSeastar / ScyllaDB,  or how we implemented a 10-times faster Cassandra
Seastar / ScyllaDB, or how we implemented a 10-times faster Cassandra
Tzach Livyatan
 
Cassandra: An Alien Technology That's not so Alien
Cassandra: An Alien Technology That's not so AlienCassandra: An Alien Technology That's not so Alien
Cassandra: An Alien Technology That's not so Alien
Brian Hess
 
Performance Testing: Scylla vs. Cassandra vs. Datastax
Performance Testing: Scylla vs. Cassandra vs. DatastaxPerformance Testing: Scylla vs. Cassandra vs. Datastax
Performance Testing: Scylla vs. Cassandra vs. Datastax
ScyllaDB
 
Apache cassandra v4.0
Apache cassandra v4.0Apache cassandra v4.0
Apache cassandra v4.0
Yuki Morishita
 
Webinar: Getting Started with Apache Cassandra
Webinar: Getting Started with Apache CassandraWebinar: Getting Started with Apache Cassandra
Webinar: Getting Started with Apache Cassandra
DataStax
 
Advanced Operations
Advanced OperationsAdvanced Operations
Advanced Operations
DataStax Academy
 
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast EnoughScylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
ScyllaDB
 
Mesosphere and Contentteam: A New Way to Run Cassandra
Mesosphere and Contentteam: A New Way to Run CassandraMesosphere and Contentteam: A New Way to Run Cassandra
Mesosphere and Contentteam: A New Way to Run Cassandra
DataStax Academy
 
DataEngConf SF16 - Collecting and Moving Data at Scale
DataEngConf SF16 - Collecting and Moving Data at Scale DataEngConf SF16 - Collecting and Moving Data at Scale
DataEngConf SF16 - Collecting and Moving Data at Scale
Hakka Labs
 
Bulk Loading into Cassandra
Bulk Loading into CassandraBulk Loading into Cassandra
Bulk Loading into Cassandra
Brian Hess
 
How you can contribute to Apache Cassandra
How you can contribute to Apache CassandraHow you can contribute to Apache Cassandra
How you can contribute to Apache Cassandra
Yuki Morishita
 
Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...
Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...
Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...
DataStax
 
Spark / Mesos Cluster Optimization
Spark / Mesos Cluster OptimizationSpark / Mesos Cluster Optimization
Spark / Mesos Cluster Optimization
ebiznext
 
Node.js and Cassandra
Node.js and CassandraNode.js and Cassandra
Node.js and Cassandra
Stratio
 
Intro to cassandra
Intro to cassandraIntro to cassandra
Intro to cassandra
Aaron Ploetz
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
Phil Peace
 
Cassandra Metrics
Cassandra MetricsCassandra Metrics
Cassandra Metrics
Chris Lohfink
 
Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2
Marco Tusa
 
JahiaOne - Performance Tuning
JahiaOne - Performance TuningJahiaOne - Performance Tuning
JahiaOne - Performance Tuning
Jahia Solutions Group
 

What's hot (20)

Scylla Summit 2016: Scylla at Samsung SDS
Scylla Summit 2016: Scylla at Samsung SDSScylla Summit 2016: Scylla at Samsung SDS
Scylla Summit 2016: Scylla at Samsung SDS
 
Seastar / ScyllaDB, or how we implemented a 10-times faster Cassandra
Seastar / ScyllaDB,  or how we implemented a 10-times faster CassandraSeastar / ScyllaDB,  or how we implemented a 10-times faster Cassandra
Seastar / ScyllaDB, or how we implemented a 10-times faster Cassandra
 
Cassandra: An Alien Technology That's not so Alien
Cassandra: An Alien Technology That's not so AlienCassandra: An Alien Technology That's not so Alien
Cassandra: An Alien Technology That's not so Alien
 
Performance Testing: Scylla vs. Cassandra vs. Datastax
Performance Testing: Scylla vs. Cassandra vs. DatastaxPerformance Testing: Scylla vs. Cassandra vs. Datastax
Performance Testing: Scylla vs. Cassandra vs. Datastax
 
Apache cassandra v4.0
Apache cassandra v4.0Apache cassandra v4.0
Apache cassandra v4.0
 
Webinar: Getting Started with Apache Cassandra
Webinar: Getting Started with Apache CassandraWebinar: Getting Started with Apache Cassandra
Webinar: Getting Started with Apache Cassandra
 
Advanced Operations
Advanced OperationsAdvanced Operations
Advanced Operations
 
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast EnoughScylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
Scylla Summit 2018: In-Memory Scylla - When Fast Storage is Not Fast Enough
 
Mesosphere and Contentteam: A New Way to Run Cassandra
Mesosphere and Contentteam: A New Way to Run CassandraMesosphere and Contentteam: A New Way to Run Cassandra
Mesosphere and Contentteam: A New Way to Run Cassandra
 
DataEngConf SF16 - Collecting and Moving Data at Scale
DataEngConf SF16 - Collecting and Moving Data at Scale DataEngConf SF16 - Collecting and Moving Data at Scale
DataEngConf SF16 - Collecting and Moving Data at Scale
 
Bulk Loading into Cassandra
Bulk Loading into CassandraBulk Loading into Cassandra
Bulk Loading into Cassandra
 
How you can contribute to Apache Cassandra
How you can contribute to Apache CassandraHow you can contribute to Apache Cassandra
How you can contribute to Apache Cassandra
 
Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...
Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...
Operations, Consistency, Failover for Multi-DC Clusters (Alexander Dejanovski...
 
Spark / Mesos Cluster Optimization
Spark / Mesos Cluster OptimizationSpark / Mesos Cluster Optimization
Spark / Mesos Cluster Optimization
 
Node.js and Cassandra
Node.js and CassandraNode.js and Cassandra
Node.js and Cassandra
 
Intro to cassandra
Intro to cassandraIntro to cassandra
Intro to cassandra
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Cassandra Metrics
Cassandra MetricsCassandra Metrics
Cassandra Metrics
 
Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2Scaling with sync_replication using Galera and EC2
Scaling with sync_replication using Galera and EC2
 
JahiaOne - Performance Tuning
JahiaOne - Performance TuningJahiaOne - Performance Tuning
JahiaOne - Performance Tuning
 

Similar to Scylla Summit 2018: Introducing ValuStor, A Memcached Alternative Made to Run with Scylla

Introduction to .Net Driver
Introduction to .Net DriverIntroduction to .Net Driver
Introduction to .Net Driver
DataStax Academy
 
(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++
Amazon Web Services
 
Apache Cassandra at the Geek2Geek Berlin
Apache Cassandra at the Geek2Geek BerlinApache Cassandra at the Geek2Geek Berlin
Apache Cassandra at the Geek2Geek Berlin
Christian Johannsen
 
Cassandra's Sweet Spot - an introduction to Apache Cassandra
Cassandra's Sweet Spot - an introduction to Apache CassandraCassandra's Sweet Spot - an introduction to Apache Cassandra
Cassandra's Sweet Spot - an introduction to Apache Cassandra
Dave Gardner
 
Speed up R with parallel programming in the Cloud
Speed up R with parallel programming in the CloudSpeed up R with parallel programming in the Cloud
Speed up R with parallel programming in the Cloud
Revolution Analytics
 
High Throughput Analytics with Cassandra & Azure
High Throughput Analytics with Cassandra & AzureHigh Throughput Analytics with Cassandra & Azure
High Throughput Analytics with Cassandra & Azure
DataStax Academy
 
Introduction to Galera Cluster
Introduction to Galera ClusterIntroduction to Galera Cluster
Introduction to Galera Cluster
Codership Oy - Creators of Galera Cluster
 
Clug 2012 March web server optimisation
Clug 2012 March   web server optimisationClug 2012 March   web server optimisation
Clug 2012 March web server optimisation
grooverdan
 
ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...
ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...
ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...
Data Con LA
 
Introduciton to Apache Cassandra for Java Developers (JavaOne)
Introduciton to Apache Cassandra for Java Developers (JavaOne)Introduciton to Apache Cassandra for Java Developers (JavaOne)
Introduciton to Apache Cassandra for Java Developers (JavaOne)
zznate
 
Memcached Study
Memcached StudyMemcached Study
Memcached Study
nam kwangjin
 
Devops kc
Devops kcDevops kc
Devops kc
Philip Thompson
 
(DAT407) Amazon ElastiCache: Deep Dive
(DAT407) Amazon ElastiCache: Deep Dive(DAT407) Amazon ElastiCache: Deep Dive
(DAT407) Amazon ElastiCache: Deep Dive
Amazon Web Services
 
Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016
Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016
Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016
DataStax
 
Load testing Cassandra applications
Load testing Cassandra applicationsLoad testing Cassandra applications
Load testing Cassandra applications
Ben Slater
 
Load Testing Cassandra Applications
Load Testing Cassandra Applications Load Testing Cassandra Applications
Load Testing Cassandra Applications
Instaclustr
 
Speeding up R with Parallel Programming in the Cloud
Speeding up R with Parallel Programming in the CloudSpeeding up R with Parallel Programming in the Cloud
Speeding up R with Parallel Programming in the Cloud
Revolution Analytics
 
D Trace Support In My Sql Guide To Solving Reallife Performance Problems
D Trace Support In My Sql Guide To Solving Reallife Performance ProblemsD Trace Support In My Sql Guide To Solving Reallife Performance Problems
D Trace Support In My Sql Guide To Solving Reallife Performance Problems
MySQLConference
 
BigData Developers MeetUp
BigData Developers MeetUpBigData Developers MeetUp
BigData Developers MeetUp
Christian Johannsen
 
Cassandra - A decentralized storage system
Cassandra - A decentralized storage systemCassandra - A decentralized storage system
Cassandra - A decentralized storage system
Arunit Gupta
 

Similar to Scylla Summit 2018: Introducing ValuStor, A Memcached Alternative Made to Run with Scylla (20)

Introduction to .Net Driver
Introduction to .Net DriverIntroduction to .Net Driver
Introduction to .Net Driver
 
(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++(DEV204) Building High-Performance Native Cloud Apps In C++
(DEV204) Building High-Performance Native Cloud Apps In C++
 
Apache Cassandra at the Geek2Geek Berlin
Apache Cassandra at the Geek2Geek BerlinApache Cassandra at the Geek2Geek Berlin
Apache Cassandra at the Geek2Geek Berlin
 
Cassandra's Sweet Spot - an introduction to Apache Cassandra
Cassandra's Sweet Spot - an introduction to Apache CassandraCassandra's Sweet Spot - an introduction to Apache Cassandra
Cassandra's Sweet Spot - an introduction to Apache Cassandra
 
Speed up R with parallel programming in the Cloud
Speed up R with parallel programming in the CloudSpeed up R with parallel programming in the Cloud
Speed up R with parallel programming in the Cloud
 
High Throughput Analytics with Cassandra & Azure
High Throughput Analytics with Cassandra & AzureHigh Throughput Analytics with Cassandra & Azure
High Throughput Analytics with Cassandra & Azure
 
Introduction to Galera Cluster
Introduction to Galera ClusterIntroduction to Galera Cluster
Introduction to Galera Cluster
 
Clug 2012 March web server optimisation
Clug 2012 March   web server optimisationClug 2012 March   web server optimisation
Clug 2012 March web server optimisation
 
ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...
ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...
ScyllaDB: What could you do with Cassandra compatibility at 1.8 million reque...
 
Introduciton to Apache Cassandra for Java Developers (JavaOne)
Introduciton to Apache Cassandra for Java Developers (JavaOne)Introduciton to Apache Cassandra for Java Developers (JavaOne)
Introduciton to Apache Cassandra for Java Developers (JavaOne)
 
Memcached Study
Memcached StudyMemcached Study
Memcached Study
 
Devops kc
Devops kcDevops kc
Devops kc
 
(DAT407) Amazon ElastiCache: Deep Dive
(DAT407) Amazon ElastiCache: Deep Dive(DAT407) Amazon ElastiCache: Deep Dive
(DAT407) Amazon ElastiCache: Deep Dive
 
Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016
Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016
Load Testing Cassandra Applications (Ben Slater, Instaclustr) | C* Summit 2016
 
Load testing Cassandra applications
Load testing Cassandra applicationsLoad testing Cassandra applications
Load testing Cassandra applications
 
Load Testing Cassandra Applications
Load Testing Cassandra Applications Load Testing Cassandra Applications
Load Testing Cassandra Applications
 
Speeding up R with Parallel Programming in the Cloud
Speeding up R with Parallel Programming in the CloudSpeeding up R with Parallel Programming in the Cloud
Speeding up R with Parallel Programming in the Cloud
 
D Trace Support In My Sql Guide To Solving Reallife Performance Problems
D Trace Support In My Sql Guide To Solving Reallife Performance ProblemsD Trace Support In My Sql Guide To Solving Reallife Performance Problems
D Trace Support In My Sql Guide To Solving Reallife Performance Problems
 
BigData Developers MeetUp
BigData Developers MeetUpBigData Developers MeetUp
BigData Developers MeetUp
 
Cassandra - A decentralized storage system
Cassandra - A decentralized storage systemCassandra - A decentralized storage system
Cassandra - A decentralized storage system
 

More from ScyllaDB

Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
ScyllaDB
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
ScyllaDB
 
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
ScyllaDB
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
ScyllaDB
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
ScyllaDB
 
What Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQLWhat Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQL
ScyllaDB
 
Low Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & PitfallsLow Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & Pitfalls
ScyllaDB
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance Dilemmas
ScyllaDB
 
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDBBeyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
ScyllaDB
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance Dilemmas
ScyllaDB
 
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
ScyllaDB
 
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
ScyllaDB
 
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr SarnaDatabase Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
ScyllaDB
 
Replacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBReplacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDB
ScyllaDB
 
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear ScalabilityPowering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
ScyllaDB
 
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
ScyllaDB
 
Getting the most out of ScyllaDB
Getting the most out of ScyllaDBGetting the most out of ScyllaDB
Getting the most out of ScyllaDB
ScyllaDB
 
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a MigrationNoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
ScyllaDB
 
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration LogisticsNoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
ScyllaDB
 
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and ChallengesNoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
ScyllaDB
 

More from ScyllaDB (20)

Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Event-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream ProcessingEvent-Driven Architecture Masterclass: Challenges in Stream Processing
Event-Driven Architecture Masterclass: Challenges in Stream Processing
 
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
Event-Driven Architecture Masterclass: Integrating Distributed Data Stores Ac...
 
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
Event-Driven Architecture Masterclass: Engineering a Robust, High-performance...
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
What Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQLWhat Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQL
 
Low Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & PitfallsLow Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & Pitfalls
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance Dilemmas
 
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDBBeyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance Dilemmas
 
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
 
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
 
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr SarnaDatabase Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
 
Replacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBReplacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDB
 
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear ScalabilityPowering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
 
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
 
Getting the most out of ScyllaDB
Getting the most out of ScyllaDBGetting the most out of ScyllaDB
Getting the most out of ScyllaDB
 
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a MigrationNoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
 
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration LogisticsNoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
 
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and ChallengesNoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
 

Recently uploaded

Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
Ayan Halder
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
lorraineandreiamcidl
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 

Recently uploaded (20)

Using Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional SafetyUsing Xen Hypervisor for Functional Safety
Using Xen Hypervisor for Functional Safety
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptxLORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
LORRAINE ANDREI_LEQUIGAN_HOW TO USE WHATSAPP.pptx
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 

Scylla Summit 2018: Introducing ValuStor, A Memcached Alternative Made to Run with Scylla

  • 1. Introducing ValuStor: Memcached Alternative for Scylla Derek Ramsey Software Engineering Manager, Sensaphone
  • 2. Who Am I? Software Engineering Manager at Sensaphone Developer and maintainer of ValuStor Added ~33,000 county/city articles to Wikipedia Avid nature photographer Father of 5 children
  • 4. What is ValuStor? Key-value and document store NoSQL database Header-only C++ abstraction layer Replacement for memcached MIT License
  • 5. History Memcached as MySQL cache ▪ 100’s of simultaneous connections • Batched writes bought time ▪ No redundancy or scalability ▪ Cold cache performance risk Took three days from inception to production ▪ No critical bugs Success! Interest! … Open source it! (Usage Guide on github)
  • 6. Memcached Often installed on client machines Memcached FAQ ▪ Not recommended for sessions ▪ Minimal Security: Only SASL authentication ▪ No failover, replication, or persistence ▪ Must use batching for performance
  • 8. ValuStor Features: Client ▪ Ease of use ▪ Abstraction ▪ Multiple Data Types • Integers (bool, 8-, 16-, 32-, 64-bit) • Floating Point • String • JSON (nlohmann::json) • Blob / Bytes • UUID ▪ Client-side write queue (backlog) ▪ Automatic Adaptive Consistency
  • 9. ValuStor Features: Driver Thread safety Multi-threading Connection Control Server Selection
  • 10. ValuStor Features: Server Architectural Advantages ▪ Performance ▪ Security ▪ Fault Tolerance • Reliability • Redundancy • Availability ▪ Scalability
  • 11. Performance Can a persistent DB compete with RAM-only caching? Async I/O ▪ < 1ms latency possible Caching ▪ Cold cache penalty ▪ Cache warming (heat-weighted load balancing)
  • 12. Security ValuStor and Scylla ▪ TLS • Client certificate authentication • Server cert verification • Domain or IP • Inter- and intra-DC encryption ▪ Password Authentication Memcached ▪ Vulnerable by design • CVE-2018-1000115 • DoS in UDP Protocol • Solution: disable UDP by default • CVE-2017-9951 • DoS overflow • CVE-2016-8704/8705/8706 • Exec Code Overflow
  • 13. Fault Tolerance: Reliability The database is offline, panic! Client-side write queue ▪ Put failed writes into a backlog queue • Automatic retry • Backlog clears when database returns • Modes: Allow, Only Use, Don’t Use ▪ Producers continue producing • Writes are delayed, not lost
  • 14. Fault Tolerance: Redundancy Custom data replication factor ▪ Configurable per keyspace (“database”) ▪ Can be changed on-the-fly ▪ Client aware Multi-datacenter support ▪ Data replication factor per keyspace and per data center ▪ Client aware
  • 15. Fault Tolerance: Availability CAP Theorem ▪ Consistency, Availability, Partition tolerance C and P ▪ Redis ▪ MongoDB Quorum Problem ▪ Must have N/2 + 1 active nodes ▪ Fragile multi-datacenter setups
  • 16. Quorum Problem: Example 1 Quorum requires three nodes.
  • 18. Quorum Problem: Example 2 Quorum now requires four nodes.
  • 19. Quorum Problem: Example 2 The primary DC goes down… ...and a backup DC takes over.
  • 20. Quorum Problem: Example 2 Both secondary DC are down... ...the primary loses quorum!
  • 21. Fault Tolerance: Availability Solution: Automatic Adaptive Consistency ▪ Eventual Consistency ▪ Tunable Consistency ▪ Adaptively downgrade on retry • Likelihood of inconsistency can be low or limited ▪ Bonus: Hinted Handoff
  • 22. Adaptive Consistency: Writes Data is written to all nodes. If two nodes go down… ...just keep going! Data on the remaining node is still consistent*
  • 23. Adaptive Consistency: Writes Data is written to all nodes. If two nodes go down… ...just keep going! Data on the remaining node is still consistent* * If you used consistency mode ALL
  • 24. Adaptive Consistency: Writes ALL: Writes confirmed on every node QUORUM: Some recent writes can be lost ANY: At least it went somewhere… (e.g. Domain Name System)
  • 25. Adaptive Consistency: Reads ALL: Always consistent QUORUM: Might be inconsistent [after node failure] ANY: At least you get something… Automatically or manually fix inconsistencies
  • 26. Scalability Scylla architecture has (almost) ∞ scalability ▪ Sharding per core: just add more ▪ Driver is sharding-aware Memcached ▪ Physically limited ▪ Must shard manually
  • 28. ValuStor Configuration // e.g. CREATE TABLE cache.values (key bigint, value text, PRIMARY KEY (k1)) ValuStor::ValuStor<std::string, int64_t> store({ {"table", "cache.values"}, {"key_field", "key"}, {"value_field", "value"}, {"hosts", "127.0.0.1"} });
  • 29. ValuStor Usage Example // e.g. CREATE TABLE cache.values (key_field bigint, value_field text, PRIMARY KEY (key_field)) // // <value> <key> ValuStor::ValuStor<std::string, int64_t> vs("example.conf"); auto store_result = vs.store(1234, "value"); if(store_result){ auto retrieve_result = vs.retrieve(1234); if(retrieve_result){ std::cout << 1234 << " => " << result.data << std::endl; } }
  • 31. Key-Value NoSQL Comparison ValuStor Memcached Redis Riak KV* DynamoDB TLS Support Persistence Multi-Master Replication Multi-DC Replication FOSS Language C++ C C Erlang Cloud Based Complexity Simple Simple Complex Complex Complex *Open-source / community version
  • 32. What about Redis? ▪ It’s more complex* ▪ May not perform as well ▪ Only master-slave replication ▪ Commons Clause modules Replace with Pedis ▪ Uses SEASTAR for I/O ...or use ValuStor * This may be desired
  • 33. What about MongoDB or CouchDB? Use Case: JSON document store #include "nlohmann/json.hpp" #include "ValuStor.hpp" … ValuStor::ValuStor<nlohmann::json, int64_t> docstore("example.conf"); std::string raw_json = "{"key":"value"}"; auto json = nlohmann::json::parse(raw_json); docstore.store(document_id, document); auto result = docstore.retrieve(document_id); if(result){ raw_json = result.data.dump(); }
  • 35. Future Beyond C/C++ ▪ SWIG Bindings (www.swig.org) • Current: PHP, Python, Perl • Future: C#, D, Go, Java, Javascript, Ruby ▪ Command line utilities New Features ▪ Performance enhancement • Futures ▪ Non-template version
  • 36. Thank You Any Questions ? Please stay in touch dramsey@sensaphone.com @ThyRamMan github.com/Sensaphone/ValuStor
  • 38. What is ValuStor? Client Driver Database Ease of Use Multi-Threading Persistence Abstraction Layer Thread Safety High Availability Type Flexibility Server Selection Redundancy Backlog Write Queue Connection Control Scalability Adaptive Consistency Security Security Performance
  • 39. Why Scylla? Eventually consistent persistent NoSQL database Efficient, close-to-the-hardware design Consistent, low-latency performance ▪ C++ ▪ Asynchronous I/O ▪ Userspace I/O scheduler ▪ Shared per core
  • 40. Caveats and Limitations Atomicity ▪ Writes are atomic, but not ordered • Requires minimum QUORUM consistency ▪ No read-and-write operations or ACID transactions Cost ▪ RAM for memcached relatively cheap ▪ Additional Maintenance Memcached evicts data, Scylla does not ▪ May need more RAM or effective use of TTL
  • 41. ValuStor Installation Dependencies ▪ C++11 compiler ▪ Cassandra C/C++ client driver • “libssl” and “libuv” libraries • https://github.com/datastax/cpp-driver/releases ▪ Scylla • https://docs.scylladb.com/getting-started/
  • 42. ValuStor Installation Include the ValuStor header file. #include "ValuStor.hpp" Have “cassandra.h” in the include path. Link with “libcassandra.so” and pthread.
  • 43. ValuStor API // TEMPLATE template<typename Val_T, typename Key_T...> class ValuStor // CONSTRUCTORS ValuStor( std::string config_file ) ValuStor( std::map<std::string, std::string> configuration_kvp ) // API Result store( Key_T... keys, Val_T value, uint32_t seconds_ttl = 0, InsertMode_t insert_mode = ValuStor::DEFAULT_BACKLOG_MODE, int64_t microseconds_since_epoch = 0 ) Result retrieve( Key_T... keys, size_t key_count = 0)
  • 44. ValuStor Configuration ValuStor::ValuStor<std::string, int64_t> store({ ... {"username", "username"}, {"password", "password"}, {"server_trusted_cert", "/path/to/ca.pem"}, {"server_verify_mode", "3"}, {"client_ssl_cert", "/path/to/client.crt"}, {"client_ssl_key", "/path/to/client.key"}, {"client_key_password", "password"} });
  • 45. ValuStor Usage Comparison: Reads // libmemcached std::string key = "key to find"; memcached_return rc; size_t value_length = 0; uint32_t flags = 0; char* result = memcached_get(memc, key.c_str(), key.size(), &value_length, &flags, &rc); if(rc == MEMCACHED_SUCCESS){ std::string value_found(result); } else{ std::string error_message(memcached_last_error_message(memc)); } // ValuStor auto result = store.retrieve("key to find"); if(result){ std::string value_found = result.data; } else{ std::string error_message = result.result_message; }
  • 46. ValuStor Usage Comparison: Multiple Reads // libmemcached // Won’t fit on the slide // ValuStor std::vector<std::string> keys = {"key1", "key2", "key3"}; for(auto& key : keys){ auto result = store.retrieve(key); if(result){ std::string val = result.data; ... } }
  • 47. ValuStor Usage Comparison: Writes // libmemcached std::string key = "key to use"; std::string value = "value to write"; time_t expiration = time(nullptr) + 1000; // or '0' for no expiration memcached_return rc = memcached_set(memc, key_to_use.c_str(), key_to_use.size(), value.c_str(), value.size(), expiration_time, 0); // ValuStor auto result = store.store("key to use", "value to write", 1000); // or '0' for no expiration
  • 48. Scylla Database Administration Creating keyspaces ▪ CREATE KEYSPACE space WITH replication = {'class':'NetworkTopologyStrategy', 'DC1':3, 'DC2':1} Creating tables ▪ CREATE TABLE space.mytable (mykey bigint PRIMARY KEY, myval text) Configuration ▪ Password authentication ▪ TLS Multiple nodes / data centers
  • 49. Compound Keys Partition Key ▪ Must be completely specified on queries ▪ Data is stored on disk in Partition Key chunks Clustering Key ▪ May be conditionally specified on queries ▪ Allows querying of multiple records Example: ▪ PRIMARY KEY ((key1, key2,...,keyN), keyB, keyC, …, keyZ)