Upload
jbellis
View
1.994
Download
0
Tags:
Embed Size (px)
DESCRIPTION
What's new in Cassandra 0.7
Citation preview
Cassandra 0.7
Friday, December 10, 2010
Features
• Live schema modification
• Secondary indexes
• Hadoop OutputFormat
• (Very) large rows
• up to 2 billion columns
• NetworkTopologyStrategy
Friday, December 10, 2010
Operations
• efficient Streaming
• Per-ColumnFamily settings of memtable thresholds
• Much more (optional) metadata about columns
Friday, December 10, 2010
Operations backports• HH disable (0.6.2)
• compaction priority (0.6.3)
• HH hourly scan (0.6.3)
• JMX metrics for row-level bloom filters (0.6.3)
• Flow control (0.6.4, 5)
• HH paging (0.6.5)
• Dynamic snitch (0.6.5)
• Tombstone removal in minor compaction (0.6.6)
Friday, December 10, 2010
Compatiblity
• Fully backwards-compatible with 0.6 data
• Some Thrift API changes
• String row keys become byte[]
• keyspace is set once per connection
• Requires drain + cluster restart
Friday, December 10, 2010
Features
Friday, December 10, 2010
Live schema changes
• Details: http://www.riptano.com/blog/live-schema-updates-cassandra-07
Friday, December 10, 2010
Data model tradeoffs
• Twitter: “Fifteen months ago, it took two weeks to perform ALTER TABLE on the statuses [tweets] table.”
Friday, December 10, 2010
A static ColumnFamily
Friday, December 10, 2010
Friday, December 10, 2010
A dynamic ColumnFamily
Friday, December 10, 2010
SELECT * FROM tweetsWHERE user_id IN (SELECT follower FROM followers WHERE user_id = ?)
followers
?
tweets
timeline
?
Friday, December 10, 2010
SuperColumns = full denormalization
Friday, December 10, 2010
A little deeper
• http://twissandra.com
• http://github.com/jhermes/twissjava
Friday, December 10, 2010
Secondary indexes
Friday, December 10, 2010
A static ColumnFamily
Friday, December 10, 2010
demo time
• Reading the slides after the talk? See http://www.riptano.com/blog/whats-new-cassandra-07-secondary-indexes
Friday, December 10, 2010
Hadoop OutputFormatjob.setOutputFormatClass(ColumnFamilyOutputFormat.class);ConfigHelper.setOutputColumnFamily(job.getConfiguration(), KS, CF);...public void reduce(Text word, Iterable<IntWritable> values, Context context){ int sum = 0; for (IntWritable val : values) sum += val.get(); context.write(outputKey, Collections.singletonList(getMutation(word, sum)));}
Friday, December 10, 2010
Large rows
• 0.6: smaller of {2GB, memory limit}
• 0.7: in_memory_compaction_limit_in_mb
Friday, December 10, 2010
NetworkTopologyStrategy
• RackAwareStrategy is tuned for 3 replicas and 2 data centers
• renamed to OldNetworkTopologyStrategy
• NTS allows configuring replicas per data center, per Keyspace
• ignores replication_factor directive
Friday, December 10, 2010
Operations
Friday, December 10, 2010
Efficient Streaming
• The following slides show how in 0.7, we just send the data portion of the sstables we are moving to a new node over to it (which is contiguous on disk, no random i/o), which rebuilds indexes etc
• This minimizes the impact on existing nodes
Friday, December 10, 2010
A
L
T
W
F(A-L]
Friday, December 10, 2010
A
L
T
W
F(A-F]
(F-L]
(A-F]
Friday, December 10, 2010
A
L
T
W
F
Data
Index
Filter
Friday, December 10, 2010
A
L
T
W
F
Index
Filter
Friday, December 10, 2010
Per-CF memtable thresholds
• Easier tuning for large numbers of ColumnFamilies
Friday, December 10, 2010
Column Metadata
• 0.6: comparator, subcomparator
• 0.7: default_validation_class, column_metadata
Friday, December 10, 2010
Native code
• JNA introduced in 0.6.5 for mlockall
• Extended to hard links in 0.6.6
Friday, December 10, 2010
Flow Control (0.6.4)
• Replica nodes drop hopeless requests on the floor
• Coordinator node is unaffected
• TimedOutException signals client to back off
• Requires enough memory to buffer RPCTimeout’s worth of requests
• (In the short term, you’re still screwed)
Friday, December 10, 2010
Flow control in 0.5
• Why backpressure doesn’t fit Cassandra
Friday, December 10, 2010
Dynamic snitch
public void sortByProximity(List<InetAddress> addresses);
Friday, December 10, 2010
Everything else
Friday, December 10, 2010
0.7 performance
• Reads roughly 100% faster, thanks largely to removing String creation
• Row-cached reads up to 8x faster after optimizations by tjake and jbellis
• Optimizations for reads of large rows
• 0.7.1? ~15% improvement everywhere from ByteBuffer optimizations
Friday, December 10, 2010
Thrift: the libpq of Cassandra
• OOMs on malformed packets
• Python Unicode string issues
• PHP support is buggy and maintainerless
Friday, December 10, 2010
Client support from Riptano
• Hector
• Building JPA/JDO layer on top
• pycassa
• phpcassa
• Soon: cassandra gem
Friday, December 10, 2010
After 0.7.0
• IndexOperator.GT
• Triggers / plugins
• Entity groups
• On-disk data format improvements (Compression, compound keys?)
Friday, December 10, 2010
Summary
Friday, December 10, 2010
Friday, December 10, 2010