• P
    Add Bloom/Ribbon hybrid API support (#8679) · 2a383f21
    Peter Dillinger 提交于
    Summary:
    This is essentially resurrection and fixing of the part of
    https://github.com/facebook/rocksdb/issues/8198 that was reverted in https://github.com/facebook/rocksdb/issues/8212, using data added in https://github.com/facebook/rocksdb/issues/8246. Basically,
    when configuring Ribbon filter, you can specify an LSM level before which
    Bloom will be used instead of Ribbon. But Bloom is only considered for
    Leveled and Universal compaction styles and file going into a known LSM
    level. This way, SST file writer, FIFO compaction, etc. use Ribbon filter as
    you would expect with NewRibbonFilterPolicy.
    
    So that this can be controlled with a single int value and so that flushes
    can be distinguished from intra-L0, we consider flush to go to level -1 for
    the purposes of this option. (Explained in API comment.)
    
    I also expect the most common and recommended Ribbon configuration to
    use Bloom during flush, to minimize slowing down writes and because according
    to my estimates, Ribbon only pays off if the structure lives in memory for
    more than an hour. Thus, I have changed the default for NewRibbonFilterPolicy
    to be this mild hybrid configuration. I don't really want to add something like
    NewHybridFilterPolicy because at least the mild hybrid configuration (Bloom for
    flush, Ribbon otherwise) should be considered a natural choice.
    
    C APIs also updated, but because they don't support overloading,
    rocksdb_filterpolicy_create_ribbon is kept pure ribbon for clarity and
    rocksdb_filterpolicy_create_ribbon_hybrid must be called for a hybrid
    configuration. While touching C API, I changed bits per key options from
    int to double.
    
    BuiltinFilterPolicy is needed so that LevelThresholdFilterPolicy doesn't inherit
    unused fields from BloomFilterPolicy.
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/8679
    
    Test Plan: new + updated tests, including crash test
    
    Reviewed By: jay-zhuang
    
    Differential Revision: D30445797
    
    Pulled By: pdillinger
    
    fbshipit-source-id: 6f5aeddfd6d79f7e55493b563c2d1d2d568892e1
    2a383f21
可在Tags中查看这些版本中当前仓库的状态.
HISTORY.md 179.4 KB