RocksDB 7.6.0 has been released. RocksDB is an embeddable key-value storage system from Facebook that supports persistence. It can also be used as a storage database in C/S mode, based on LevelDB. The updates are as follows:
new features
- Add to
prepopulate_blob_cache
to ColumnFamilyOptions. - L2 cache using blob cache is supported.When creating a Blob cache, the user can configure the LRUCacheOptions
secondary_cache
to set up the second level blob cache. - When the backing cache of the blob cache and the block cache are different, the memory usage of the blob cache is billed.
- Improve subcompaction scoping so that it may be more even. A more even distribution of subcompactions will improve compaction throughput for some workloads.
- Added CompactPri::kRoundRobin, a compaction picking mode that processes all files with a compact cursor in a round-robin fashion. This feature has been available since 7.5.
- Provides support for subcompactions for user_defined_timestamp.
- added an option
memtable_protection_bytes_per_key
which enables checksum protection for each memtable entry. - Added blob-specific cache priority – bottom level.
Public API changes
- Removed Customizable support for RateLimiter and removed its CreateFromString() and Type() functions.
CompactRangeOptions::exclusive_manual_compaction
Defaults to false now. This ensures that RocksDB does not introduce artificial concurrency limits by default.- Tiered Storage: Changes
bottommost_temperture
forlast_level_temperture
. Keep the old option name for migration only, use the new option.The behavior has been changed to onlylast_level
SST file apply temperature . - Added a new experimental ReadOption flag called optimize_multiget_for_io which, when set, attempts to reduce MultiGet latency by spawning coroutines for keys of multiple levels.
bug fix
- Fix bug since 7.4.0 that after any DropColumnFamily on a DB, some fsync operations could be skipped until it is reopened.This may result in data loss in the event of a power outage
- Fix a bug where the GenericRateLimiter could dynamically restore the set bandwidth using SetBytesPerSecond() when the user configures a struct surrounding it, e.g. using GetOptionsFromString() to configure an option that references an existing RateLimiter object
- repair
GenericRateLimiter
race conditions in - repair
FIFOCompactionPicker::PickTTLCompaction
Total_size calculation may cause an underflow bug - fix race bug in hash linked list memtable
- Fixed a bug where best_efforts_recovery might fail to open the database with mmap read
- Fixed bug where blobs read during compaction would pollute the cache
- Fixed data race in LRUCache when used with secondary_cache
- fixed even if the
fill_cache
With the read option set to false, blobs read by the iterator will also insert cached errors - fixed
CompressedSecondaryCache::SplitValueIntoChunks()
andMergeChunksIntoValueTest
middleAllocateData()
cause segfault - Fixed a bug in BlobDB where a mix of inlined and blob values could result in incorrect values being passed to the compaction filter (see #10391)
- Fixed stress test by
FaultInjectionSecondaryCache
memory leak problem
performance improvements
- instead of building on every read operation
FragmentedRangeTombstoneList
, now it is built once and stored in immutable memtable s. This improves the speed of querying range tombstones from immutable memtables. - When using iterators with the integrated BlobDB implementation, Blob cache handles are now freed as soon as the iterator’s position changes.
- If the optimize_multiget_for_io ReadOption flag is set, MultiGet can now perform more IO in parallel by reading data blocks in SST files from multiple levels.
For more details, please check: https://github.com/facebook/rocksdb/releases/tag/v7.6.0
#RocksDB #released #storage #system #developed #Facebook #News Fast Delivery