September 4th, 2013

The headlining features in 2.0 are lightweight transactionsCQL enhancements, and triggers. But 2.0 also features a lot of internal optimizations and improvements!

Performance optimization

Spring cleaning

  • Removed compatibility with pre-1.2.5 sstables and pre-1.2.9 network messages. Upgrade through the latest version of 1.2 first.
  • SuperColumns are gone internally, replaced by composite cells. The SuperColumn API is retained and translated transparently to maintain backwards compatibility. (Richard Low has a good writeup of why supercolumns are obsolete.)
  • The potentially dangerous countPendingHints JMX call has been replaced by a Hints Created metric, which is performant enough to be monitored regularly besides eliminating the posibility of OOM-ing your node.
  • The on-heap partition cache has been removed, leaving only the off-heap option.
  • Vnodes are on by default, and the old token range bisection code for non-vnode clusters is gone. When not using vnodes, specify a token manually or one will be chosen randomly.
  • Removed emergency memory pressure valve logic. The intent here was to give operators enough breathing room to fix misconfigurations causing heap pressure, but it was never as reliable as we would have liked. And now that the important storage engine metadata has been moved off-heap, memory shortages will be obvious much earlier.

Operational concerns

  • Java7 is now required!
  • JNA is no longer required for fast snapshots, only to mlockall the JVM (which is still a good reason to deploy it).
  • Leveled compaction level information has been moved into sstable metadata — each sstable knows what level it’s at, so there is no need for a separate manifest. This makes leveled compaction more robust and snapshots simpler.
  • Kernel page cache skipping has been removed in favor of optional row preheating.
  • Streaming has been rewritten to be more transparent and robust.
  • Streaming support for old-version sstables means you no longer have to manually runupgradesstables across the cluster before you can perform repairs. It also means you can bulk load old snapshots directly.