Skip to content

Releases: facebook/rocksdb

RocksDB 3.10

03 Apr 17:28
Compare
Choose a tag to compare

3.10.0 (4/3/2015)

New Features

  • GetThreadStatus() is now able to report detailed thread status, including:
    • Thread Operation including flush and compaction.
    • The stage of the current thread operation.
    • The elapsed time in micros since the current thread operation started.
      More information can be found in include/rocksdb/thread_status.h. In addition, when running db_bench with --thread_status_per_interval, db_bench will also report thread status periodically.
  • Changed the LRU caching algorithm so that referenced blocks (by iterators) are never evicted. This change made parameter removeScanCountLimit obsolete. Because of that NewLRUCache doesn't take three arguments anymore. table_cache_remove_scan_limit option is also removed
  • By default we now optimize the compilation for the compilation platform (using -march=native). If you want to build portable binary, use 'PORTABLE=1' before the make command.
  • We now allow level-compaction to place files in different paths by
    specifying them in db_paths along with the target_size.
    Lower numbered levels will be placed earlier in the db_paths and higher
    numbered levels will be placed later in the db_paths vector.
  • Potentially big performance improvements if you're using RocksDB with lots of column families (100-1000)
  • Added BlockBasedTableOptions.format_version option, which allows user to specify which version of block based table he wants. As a general guidline, newer versions have more features, but might not be readable by older versions of RocksDB.
  • Added new block based table format (version 2), which you can enable by setting BlockBasedTableOptions.format_version = 2. This format changes how we encode size information in compressed blocks and should help with memory allocations if you're using Zlib or BZip2 compressions.
  • MemEnv (env that stores data in memory) is now available in default library build. You can create it by calling NewMemEnv().
  • Add SliceTransform.SameResultWhenAppended() to help users determine it is safe to apply prefix bloom/hash.
  • Block based table now makes use of prefix bloom filter if it is a full fulter.
  • Block based table remembers whether a whole key or prefix based bloom filter is supported in SST files. Do a sanity check when reading the file with users' configuration.
  • Fixed a bug in ReadOnlyBackupEngine that deleted corrupted backups in some cases, even though the engine was ReadOnly
  • options.level_compaction_dynamic_level_bytes, an experimental feature to allow RocksDB to pick dynamic base of bytes for levels. With this feature turned on, we will automatically adjust max bytes for each level. The goal of this feature is to have lower bound on size amplification. For more details, see comments in options.h.
  • Added an abstract base class WriteBatchBase for write batches
  • Fixed a bug where we start deleting files of a dropped column families even if there are still live references to it

Public API changes

  • Deprecated skip_log_error_on_recovery and table_cache_remove_scan_count_limit options.
  • Logger method logv with log level parameter is now virtual

RocksJava

  • Added compression per level API.
  • MemEnv is now available in RocksJava via RocksMemEnv class.
  • lz4 compression is now included in rocksjava static library when running make rocksdbjavastatic.
  • Overflowing a size_t when setting rocksdb options now throws an IllegalArgumentException, which removes the necessity for a developer to catch these Exceptions explicitly.

RocksDB 3.9.1

11 Dec 18:34
Compare
Choose a tag to compare

Public API changes

  • New API to create a checkpoint added. Given a directory name, creates a new
    database which is an image of the existing database.
    *New API LinkFile added to Env. If you implement your own Env class, an
    implementation of the API LinkFile will have to be provided.
  • MemTableRep takes MemTableAllocator instead of Arena

Improvements

  • RocksDBLite library now becomes smaller and will be compiled with -fno-exceptions flag.

RocksDB 3.8

21 Nov 00:08
Compare
Choose a tag to compare

Public API changes

  • BackupEngine::NewBackupEngine() was deprecated; please use BackupEngine::Open() from now on.
  • BackupableDB/RestoreBackupableDB have new GarbageCollect() methods, which will clean up files from corrupt and obsolete backups.
  • BackupableDB/RestoreBackupableDB have new GetCorruptedBackups() methods which list corrupt backups.

Cleanup

  • Bunch of code cleanup, some extra warnings turned on (-Wshadow, -Wshorten-64-to-32, -Wnon-virtual-dtor)

New features

  • CompactFiles and EventListener, although they are still in experimental state
  • Full ColumnFamily support in RocksJava.

RocksDB 3.7

11 Nov 20:21
Compare
Choose a tag to compare
  • Introduce SetOptions() API to allow adjusting a subset of options dynamically online
  • Introduce 4 new convenient functions for converting Options from string: GetColumnFamilyOptionsFromMap(), GetColumnFamilyOptionsFromString(), GetDBOptionsFromMap(), GetDBOptionsFromString()
  • Remove WriteBatchWithIndex.Delete() overloads using SliceParts
  • When opening a DB, if options.max_background_compactions is larger than the existing low pri pool of options.env, it will enlarge it. Similarly, options.max_background_flushes is larger than the existing high pri pool of options.env, it will enlarge it.

RocksDB 3.6.2

30 Oct 07:06
Compare
Choose a tag to compare

Bug Fixes

  • Fix a corner case that causes MANIFEST corruption when RocksDB cannot open new files during the compaction but before the compaction completes RocksDB becomes able to open new files once again.

New Features

  • Allow dynamic disable / enable RocksDB auto-compaction.

Internal Improvements

  • Use fallocate(FALLOC_FL_PUNCH_HOLE) to release unused blocks at the end of file.

RocksDB 3.6.1

20 Oct 22:26
Compare
Choose a tag to compare

New features

  • Support more column families without performance bottlenecks
  • Provide new way of passing options to RocksDB
  • Make some options dynamically changeable
  • Bunch of new Java bindings APIs

Disk format changes

  • If you're using RocksDB on ARM platforms and you're using default bloom filter, there is a disk format change you need to be aware of. There are three steps you need to do when you convert to new release: 1. turn off filter policy, 2. compact the whole database, 3. turn on filter policy

Behavior changes

  • We have refactored our system of stalling writes. Any stall-related statistics' meanings are changed. Instead of per-write stall counts, we now count stalls per-epoch, where epochs are periods between flushes and compactions. You'll find more information in our Tuning Perf Guide.
  • When disableDataSync=true, we no longer sync the MANIFEST file.
  • Add identity_as_first_hash property to CuckooTable. SST file needs to be rebuilt to be opened by reader properly.

Public API changes

  • Change target_file_size_base type to uint64_t from int.
  • Remove allow_thread_local. This feature was proved to be stable, so we are turning it always-on.

RocksDB 3.5.1

08 Oct 17:24
Compare
Choose a tag to compare

RocksDB 3.5 including one bug fix that affected deployments that are triggering manual flushes.

RocksDB 3.5 Release

12 Sep 16:59
Compare
Choose a tag to compare

New Features

  • Add include/utilities/write_batch_with_index.h, providing a utility class to query data out of WriteBatch when building it.
  • new ReadOptions.total_order_seek to force total order seek when block-based table is built with hash index.

Public API changes

  • The Prefix Extractor used with V2 compaction filters is now passed user key to SliceTransform::Transform instead of unparsed RocksDB key.
  • Move BlockBasedTable related options to BlockBasedTableOptions from Options. Change corresponding JNI interface. Options affected include: no_block_cache, block_cache, block_cache_compressed, block_size, block_size_deviation, block_restart_interval, filter_policy, whole_key_filtering. filter_policy is changed to shared_ptr from a raw pointer.
  • Remove deprecated options: disable_seek_compaction and db_stats_log_interval
  • OptimizeForPointLookup() takes one parameter for block cache size. It now builds hash index, bloom filter, and block cache.

RocksDB 3.4 Release

28 Aug 15:32
Compare
Choose a tag to compare

New Features

  • Support Multiple DB paths in universal style compactions
  • Add feature of storing plain table index and bloom filter in SST file.
  • CompactRange() will never output compacted files to level 0. This used to be the case when all the compaction input files were at level 0.

Public API changes

  • DBOptions.db_paths now is a vector of a DBPath structure which indicates both of path and target size
  • NewPlainTableFactory instead of bunch of parameters now accepts PlainTableOptions, which is defined in include/rocksdb/table.h
  • Moved include/utilities/.h to include/rocksdb/utilities/.h
  • Statistics APIs now take uint32_t as type instead of Tickers. Also make two access functions getTickerCount and histogramData const
  • Add DB property rocksdb.estimate-num-keys, estimated number of live keys in DB.
  • Add DB::GetIntProperty(), which returns DB properties that are integer as uint64_t.

Other notes

  • Fixed a data race bug that might cause segment fault
  • Fixed a bug of manual compaction.

RocksDB 3.3

29 Jul 18:15
Compare
Choose a tag to compare

New Features

  • JSON API prototype.
  • Performance improvement on HashLinkList: We addressed performance outlier of HashLinkList caused by skewed bucket by switching data in the bucket from linked list to skip list. Add parameter threshold_use_skiplist in NewHashLinkListRepFactory().
  • More effective on storage space reclaim: RocksDB is now able to reclaim storage space more effectively during the compaction process. This is done by compensating the size of each deletion entry by the 2X average value size, which makes compaction to be triggerred by deletion entries more easily.
  • TimeOut API to write: Now WriteOptions have a variable called timeout_hint_us. With timeout_hint_us set to non-zero, any write associated with this timeout_hint_us may be aborted when it runs longer than the specified timeout_hint_us, and it is guaranteed that any write completes earlier than the specified time-out will not be aborted due to the time-out condition.
  • rate_limiter option: We added an option that controls total throughput of flush and compaction. The throughput is specified in bytes/sec. Flush always has precedence over compaction when available bandwidth is constrained.

Public API changes

  • Removed NewTotalOrderPlainTableFactory because it is not used and implemented semantically incorrect.