• A
    Maintain position in range deletions map · b104b878
    Andrew Kryczka 提交于
    Summary:
    When deletion-collapsing mode is enabled (i.e., for DBIter/CompactionIterator), we maintain position in the tombstone maps across calls to ShouldDelete(). Since iterators often access keys sequentially (or reverse-sequentially), scanning forward/backward from the last position can be faster than binary-searching the map for every key.
    
    - When Next() is invoked on an iterator, we use kForwardTraversal to scan forwards, if needed, until arriving at the range deletion containing the next key.
    - Similarly for Prev(), we use kBackwardTraversal to scan backwards in the range deletion map.
    - When the iterator seeks, we use kBinarySearch for repositioning
    - After tombstones are added or before the first ShouldDelete() invocation, the current position is set to invalid, which forces kBinarySearch to be used.
    - Non-iterator users (i.e., Get()) use kFullScan, which has the same behavior as before---scan the whole map for every key passed to ShouldDelete().
    Closes https://github.com/facebook/rocksdb/pull/1701
    
    Differential Revision: D4350318
    
    Pulled By: ajkr
    
    fbshipit-source-id: 5129b76
    b104b878
merge_helper.cc 14.3 KB