4. CREATE TABLE users (
id uuid PRIMARY KEY,
name text,
state text,
birth_date int
);
CREATE INDEX ON users(state);
SELECT * FROM users
WHERE state=‘Texas’
AND birth_date > 1950;
New Core Value
• Massive scalablility
• High performance
• Reliability/Availability
• Ease of use
5. *Key concepts?
*Data Modeling section of documentation: http://www.datastax.com/
documentation/cassandra/1.2/index.html#cassandra/ddl/
ddl_anatomy_table_c.html
CQL delivers
"Coming from a relational database background we found
the transition to Cassandra to be very straightforward. There are a
few simple key concepts one must grasp at first but ever since it's
been smooth sailing for us."
Boris Wolf, Comcast
6. 1.2 for Developers
• CQL3
• Thrift compatibility
• Collections
• Data dictionary
• Auth support
• Hadoop support
• Native drivers
• Tracing
• Atomic batches
7. [cassandra.yaml]
authenticator: PasswordAuthenticator
# DSE offers KerberosAuthenticator as well
CREATE USER robin WITH PASSWORD 'manager' SUPERUSER;
ALTER USER cassandra WITH PASSWORD 'newpassword';
LIST USERS;
DROP USER cassandra;
Authentication
23. SELECT * FROM users
WHERE username = ’jbellis’
[empty resultset]
INSERT INTO users (...)
VALUES (’jbellis’, ...)
Session 1
SELECT * FROM users
WHERE username = ’jbellis’
[empty resultset]
INSERT INTO users (...)
VALUES (’jbellis’, ...)
Session 2
Lightweight transactions: the problem
24. Paxos
• All operations are quorum-based
• Each replica sends information about unfinished operations to the leader
during prepare
• Paxos made Simple
25. LWT: details
• 4 round trips vs 1 for normal updates
• Paxos state is durable
• Immediate consistency with no leader election or failover
• ConsistencyLevel.SERIAL
• http://www.datastax.com/dev/blog/lightweight-transactions-in-
cassandra-2-0
26. LWT: Use with caution
• Great for 1% of your application
• Eventual consistency is your friend
• http://www.slideshare.net/planetcassandra/c-summit-2013-eventual-consistency-
hopeful-consistency-by-christos-kalantzis
27. UPDATE USERS
SET email = ’jonathan@datastax.com’, ...
WHERE username = ’jbellis’
IF email = ’jbellis@datastax.com’;
INSERT INTO USERS (username, email, ...)
VALUES (‘jbellis’, ‘jbellis@datastax.com’, ... )
IF NOT EXISTS;
Using LWT
38. Misc. performance improvements
• Tracking statistics on clustered columns allows eliminating unnecessary
sstables from the read path
39. Misc. performance improvements
• Tracking statistics on clustered columns allows eliminating unnecessary
sstables from the read path
• New half-synchronous, half-asynchronous Thrift server based on LMAX
Disruptor
40. Misc. performance improvements
• Tracking statistics on clustered columns allows eliminating unnecessary
sstables from the read path
• New half-synchronous, half-asynchronous Thrift server based on LMAX
Disruptor
• Faster partition index lookups and cache reads by improving performance
of off-heap memory
41. Misc. performance improvements
• Tracking statistics on clustered columns allows eliminating unnecessary
sstables from the read path
• New half-synchronous, half-asynchronous Thrift server based on LMAX
Disruptor
• Faster partition index lookups and cache reads by improving performance
of off-heap memory
• Faster reads of compressed data by switching from CRC32 to Adler
checksums
42. Misc. performance improvements
• Tracking statistics on clustered columns allows eliminating unnecessary
sstables from the read path
• New half-synchronous, half-asynchronous Thrift server based on LMAX
Disruptor
• Faster partition index lookups and cache reads by improving performance
of off-heap memory
• Faster reads of compressed data by switching from CRC32 to Adler
checksums
• JEMalloc support for off-heap allocation
45. Spring cleaning
• Removed compatibility with pre-1.2.5 sstables and pre-1.2.9 schema
• The potentially dangerous countPendingHints JMX call has been replaced
by a Hints Created metric
46. Spring cleaning
• Removed compatibility with pre-1.2.5 sstables and pre-1.2.9 schema
• The potentially dangerous countPendingHints JMX call has been replaced
by a Hints Created metric
• The on-heap partition cache (“row cache”) has been removed
47. Spring cleaning
• Removed compatibility with pre-1.2.5 sstables and pre-1.2.9 schema
• The potentially dangerous countPendingHints JMX call has been replaced
by a Hints Created metric
• The on-heap partition cache (“row cache”) has been removed
• Vnodes are on by default
48. Spring cleaning
• Removed compatibility with pre-1.2.5 sstables and pre-1.2.9 schema
• The potentially dangerous countPendingHints JMX call has been replaced
by a Hints Created metric
• The on-heap partition cache (“row cache”) has been removed
• Vnodes are on by default
• the old token range bisection code for non-vnode clusters is gone
49. Spring cleaning
• Removed compatibility with pre-1.2.5 sstables and pre-1.2.9 schema
• The potentially dangerous countPendingHints JMX call has been replaced
by a Hints Created metric
• The on-heap partition cache (“row cache”) has been removed
• Vnodes are on by default
• the old token range bisection code for non-vnode clusters is gone
• Removed emergency memory pressure valve logic
52. Operational concerns
• Java7 is now required!
• Leveled compaction level information has been moved into sstable
metadata
53. Operational concerns
• Java7 is now required!
• Leveled compaction level information has been moved into sstable
metadata
• Kernel page cache skipping has been removed in favor of optional row
preheating (preheat_kernel_page_cache)
54. Operational concerns
• Java7 is now required!
• Leveled compaction level information has been moved into sstable
metadata
• Kernel page cache skipping has been removed in favor of optional row
preheating (preheat_kernel_page_cache)
• Streaming has been rewritten to be more transparent and robust.
55. Operational concerns
• Java7 is now required!
• Leveled compaction level information has been moved into sstable
metadata
• Kernel page cache skipping has been removed in favor of optional row
preheating (preheat_kernel_page_cache)
• Streaming has been rewritten to be more transparent and robust.
• Streaming support for old-version sstables