RocksDB 7.6.0 发布,Facebook 开发的 k-v 存储系统

RocksDB 7.6.0 现已发布,RocksDB 是一个来自 Facebook 的可嵌入的支持持久化的 key-value 存储系统,也可作为 C/S 模式下的存储数据库,基于 LevelDB 构建。更新内容如下:

新的功能

  • 添加prepopulate_blob_cache到 ColumnFamilyOptions。
  • 支持使用 blob 缓存的二级缓存。在创建 Blob 缓存时,用户可以通过配置 LRUCacheOptions 中的secondary_cache来设置二级 Blob 缓存。
  • 当 blob 缓存和 block 缓存的 backing 缓存不同时,计费 blob 缓存的内存使用量。
  • 改进 subcompaction 范围划分,使其可能更均匀。subcompaction 的更均匀分布将提高某些工作负载的压缩吞吐量。
  • 添加 CompactionPri::kRoundRobin,这是一种 compaction picking 模式,它以循环方式处理所有带有 compact cursor 的文件。此功能从 7.5 开始可用。
  • 为 user_defined_timestamp 提供了对 subcompactions 的支持。
  • 添加了一个选项memtable_protection_bytes_per_key,开启了每个 memtable entry 的校验和保护。
  • 添加了特定于 blob 的缓存优先级 - bottom level。

Public API changes

  • 删除了对 RateLimiter 的 Customizable 支持并删除了它的 CreateFromString() 和 Type() 函数。
  • CompactRangeOptions::exclusive_manual_compaction现在默认为 false。这确保了 RocksDB 默认不会引入人为的并行限制。
  • Tiered Storage:更改bottommost_temperturelast_level_temperture。保留旧选项名称仅用于迁移,请使用新选项。行为已更改为仅对last_levelSST 文件 apply temperature 。
  • 添加了一个名为 optimize_multiget_for_io 的新实验性 ReadOption flag,该标志在设置时尝试通过为多级的键生成 coroutines 来减少 MultiGet 延迟。

Bug 修复

  • 修复从 7.4.0 开始的错误,即在一个 DB 上的任何 DropColumnFamily 之后,一些 fsync 操作可能被跳过,直到它被重新打开。这可能会导致断电时的数据丢失
  • 修复一个错误,当用户配置一个包围它的结构时,GenericRateLimiter 可能会使用 SetBytesPerSecond() 动态地恢复设置的带宽,例如,使用 GetOptionsFromString() 配置一个引用现有 RateLimiter 对象的选项
  • 修复GenericRateLimiter中的 race conditions
  • 修复FIFOCompactionPicker::PickTTLCompactiontotal_size 计算可能导致下溢的错误
  • 修复 hash linked list memtable 中的 race bug
  • 修复了一个 bug,即 best_efforts_recovery 可能无法通过 mmap 读取来打开数据库
  • 修复了压缩期间读取的 blob 会污染缓存的错误
  • 修复了与 secondary_cache 一起使用时 LRUCache 中的 data race
  • 修复了即使将fill_cache读取选项设置为 false ,迭代器读取的 blob 也会插入缓存的错误
  • 修复了CompressedSecondaryCache::SplitValueIntoChunks()MergeChunksIntoValueTestAllocateData()导致的 segfault
  • 修复了 BlobDB 中的一个 bug,即 inlined 和 blob 值的混合可能导致将不正确的值传递给 compaction filter(参阅#10391
  • 修复了压力测试中由FaultInjectionSecondaryCache引起的内存泄露问题

性能改进

  • 与其在每次读取操作中构建FragmentedRangeTombstoneList,现在它被构建一次并存储在不可变的 memtable s中。这提高了从不可变的 memtables 中查询 range tombstones 的速度。
  • 将迭代器与集成的 BlobDB 实现结合使用时,现在会在迭代器的位置更改时立即释放 Blob cache handles。
  • 如果设置了 optimize_multiget_for_io ReadOption flag,MultiGet 现在可以通过从多级读取 SST 文件中的 data blocks 来并行执行更多 IO。

更多详情可查看:https://github.com/facebook/rocksdb/releases/tag/v7.6.0 

 

展开阅读全文
发表评论

相关文章