See all blog posts

ScyllaDB Release 2.0

ScyllaDB Release

Check out the new ScyllaDB Release!

The ScyllaDB team is pleased to announce the release of ScyllaDB 2.0, a production-ready ScyllaDB major release. ScyllaDB is an open source NoSQL database compatible with Apache Cassandra, with superior performance and consistently low latency. From now on, critical bugs will be fixed in 2.0 and 1.7 release series only. If you are still using open source ScyllaDB 1.6 or earlier release – you are encouraged to upgrade. We will continue to fix bugs and add features on the master branch toward 2.1 and beyond. Please make sure to read the system impacts and known issue sections below before you upgrade.

Related links:

Get ScyllaDB 2.0
Upgrade from ScyllaDB 1.7 to ScyllaDB 2.0
Experimental Materialized Views
Heat Weighted Load Balancing
Improved Performance for CPU-bound workloads
Native support for EC2 i3 instances
CPU isolation

Please let us know if you encounter any problems.

New Features

  • Counters. Now production ready and are enabled by default.
  • Materialized Views (MV). Experimental. In many use cases, the same information record needs to be queried based on more than one key. For example, user data includes name and id fields, and needs to be queried once by name and once by id. Prior to the introduction of Materialized Views, the only way to implement this in ScyllaDB was using denormalization, maintaining two tables and synchronizing them from within your application. With Materialized Views (MV), ScyllaDB automates this process for you and allows for fast lookups of data in each view using the standard read path. More on MV support and limitations in ScyllaDB 2.0 here.
  • Row Cache. In Pre 2.0 releases, ScyllaDB cached full partitions only and we chose not to cache partitions larger than 10MB. With the introduction of the row cache, ScyllaDB can cache a single CQL row out of a large partition, removing this limitation. This change will significantly improve ScyllaDB performance for use cases with large partitions such as Time Series.
  • Heat Weighted Load Balancing. When a ScyllaDB node restarts for any reason (upgrade, config update, error), it starts with an empty cache. This means the node read path will always hit disk until it’s cache is repopulated. During this time, this node will be slower, and as a result, can slow down the entire cluster. Heat Weighted Load Balancing solves this issue by optimizing the node selection in the coordinator based on the heat of each node. A hot node, with a good cache-hit-ratio, will get more reads requests than a cold node with the same data and a lower cache hit ratio. After some time, the cold node will become hot, and the load balancing will become uniform again. #1455. More on Heat Weighted Load Balancing here
  • Improved Performance for CPU-bound workloads. More here.
  • DNS resolution. You can now use DNS names (FQDN), not only IPs, in scylla.yaml for seed nodes, listen_address, broadcast_address and broadcast_rpc_address #2357.
  • Docker experimental flag. You can now use “–experimental 1” with Docker to use experimental features (like MV).
  • Ext4 support. ScyllaDB now supports the ext4 file system in production, not just in dev mode. Using XFS is still recommended for best performance #2381.
  • Native support for EC2 i3 instances. ScyllaDB AMI is now optimized to get the most from i3 instances. Among others, ScyllaDB now takes advantage of the NVMe, i3.16xlarge instance’s network devices, and more.
  • CPU isolation. Experimental. Improve latency using isolation between background tasks like memtable flushes and compaction and foreground tasks like CQL read/write. More here.

ScyllaDB Impacts – read carefully:

  • Driver support. Older versions of Cassandra drivers will no longer be supported. With the introduction of MV, ScyllaDB has moved to Cassandra 3.0 system tables. This means old Cassandra drivers, which can not work with Cassandra 3.0, will stop working with ScyllaDB.
    To ensure your application will work properly after a ScyllaDB upgrade, we highly recommend upgrading your Cassandra driver before upgrading to ScyllaDB 2.0. The latest drivers are backward compatible and will work with all ScyllaDB1.x releases, past and future.
    At the very least, your Cassandra driver should be in the list below or later.
    – C++ : 2.3+
    – C#: 3.0+
    – Java: 3.0+
    – Node.js: 3.0+
    – PHP: 1.2+
    – Python: 3.5+
    – Ruby: 3.0+
    – GoCQL commit 8d27cdeae224463cadc1ee973386862baaf6662e (Mar 1, 2016) or later.
  • Upgrade procedure. You can only upgrade to ScyllaDB 2.0 from ScyllaDB 1.7.4 or later. Upgrade from earlier ScyllaDB release is not supported.
  • Counter Migration. ScyllaDB does not support Counter SSTables created by Cassandra 2.0 or older. Note that if you upgraded from Cassandra 2.0 to 2.1, you may still have old Counters in the sstables.
    The proper way to migrate Counters data from Cassandra to ScyllaDB is to run a major compaction on the Cassandra node, and use sstableloader to load the sstable to ScyllaDB.
    If you are using experimental Counters in 1.7.4, read the notes on upgrading to 1.7.5, they apply to 1.7.4 to 2.0 upgrade as well.
  • Deprecated partitioners.  Byte-ordered and random partitioners were deprecated in 2.0 and will be removed in a future version. Please email [email protected] if you use or are planning to use these partitioners.

Known Issues

Slow gossip propagation in ScyllaDB 2.0 may cause an issue when adding a node to a large cluster. To reduce this risk, it is recommended to set ring_delay_ms value to 120000 ms (2 minutes) in scylla.yaml of the new node. The default is 30000 (30s). #2861 #2855.

Metrics updates from 1.7

ScyllaDB Grafana Monitoring project now includes ScyllaDB 2.0 dashboard by default.

The following metric names have changed:

scylla_cache_evictions To scylla_cache_partition_evictions
scylla_cache_hits To scylla_cache_partition_hits
scylla_cache_insertions To scylla_cache_partition_insertions
scylla_cache_merges To scylla_cache_partition_merges
scylla_cache_misses To scylla_cache_partition_misses
scylla_cache_removals To scylla_cache_partition_removals
scylla_cache_total To scylla_cache_bytes_total
scylla_cache_used To scylla_cache_bytes_used

The following metrics are no longer available:

scylla_cache_uncached_wide_partitions
scylla_cache_wide_partition_evictions
scylla_cache_wide_partition_mispopulations

The following metrics are new in ScyllaDB 2.0:

scylla_cache_mispopulations
scylla_cache_reads
scylla_cache_active_reads
scylla_cache_reads_with_misses
scylla_cache_row_hits
scylla_cache_row_insertions
scylla_cache_row_misses
scylla_cache_sstable_partition_skips
scylla_cache_sstable_reader_recreations
scylla_cache_sstable_row_skips
scylla_column_family_live_disk_space
scylla_column_family_live_sstable
scylla_column_family_memtable_switch
scylla_column_family_pending_compaction
scylla_column_family_pending_tasks
scylla_column_family_total_disk_space
scylla_database_active_reads_streaming
scylla_database_counter_cell_lock_acquisition
scylla_database_counter_cell_lock_pending
scylla_database_cpu_flush_quota
scylla_database_queued_reads_streaming
scylla_execution_stages_function_calls_enqueued
scylla_execution_stages_function_calls_executed
scylla_execution_stages_tasks_preempted
scylla_execution_stages_tasks_scheduled
scylla_scylladb_current_version
scylla_sstables_index_page_blocks
scylla_sstables_index_page_hits
scylla_sstables_index_page_misses
scylla_storage_proxy_coordinator_background_read_repairs
scylla_storage_proxy_coordinator_foreground_read_repair
scylla_storage_proxy_coordinator_read_latency
scylla_storage_proxy_coordinator_write_latency
scylla_storage_proxy_replica_received_counter_updates

For a description of each metric, go to http://scylla-ip:9180/metrics

Noteworthy Bug Fixes

  • CQL: Dropping a table doesn’t drop its dropped columns #2633, #2634
  • CQL: “enabled” compaction attribute on schema is ignored #2547
  • CQL: metadata describes counter columns as bigint #2569
  • CQL: no support for Cannot SELECT MAX(TEXT) #2459
  • CQL: Cannot create table with non-alphanumeric UDT #2491
  • CQL: tracing not working on big clusters #2243
  • Security: unauthorized user can drop system_auth #2346
  • Docker: ScyllaDB docker write Reactor stalled report on every activation #2162
  • ScyllaDB install: Installation on Ubuntu/Debian systems fails if a “scylla” user already exists #2389
  • ScyllaDB install: no support for installing specific, not latest, ScyllaDB patch version on CentOS #2642
  • ScyllaDB install: scylla_cpuscaling_setup doesn’t work on AWS/GCE because these VMs doesn’t support cpufreq #2051
  • ScyllaDB install: on Ubuntu16.04, device /dev/md0 is renamed to /dev/md127 after reboot #2502
  • Systemd: scylla-server.service should start after network-online.target instead of network.target #2337
  • Streaming: on some cases, streaming reads may block user reads #2663
  • Streaming: repair can fail due to reads overloads #2659
  • Multi-DC: inter_dc_tcp_nodelay configuration parameter ignored #6
  • Gossip: bootstrapping node might be overwhelmed with streaming, delay the update the gossip heartbeat and appears to be down #2150
  • ScyllaDB: On large nodes reporting metrics via Prometheus may effect requests latency #2475
  • Repair: Do not allow repair until node is in NORMAL status #2723

About Tzach Livyatan

Tzach Livyatan has a B.A. and MSc in Computer Science (Technion, Summa Cum Laude), and has had a 15 year career in development, system engineering and product management. In the past he worked in the Telecom domain, focusing on carrier grade systems, signalling, policy and charging applications.