Enable backward iterator for keys with user-defined timestamp (#8035)
Summary:
This PR does the following:
- Enable backward iteration for keys with user-defined timestamp. Note that merge, single delete, range delete are not supported yet.
- Introduces a new helper API `Comparator::EqualWithoutTimestamp()`.
- Fix a typo in `SetTimestamp()`.
- Add/update unit tests
Run db_bench (built with DEBUG_LEVEL=0) to demonstrate that no overhead is introduced for CPU-intensive workloads with a lot of `Prev()`. Also provided results of iterating keys with timestamps.
1. Disable timestamp, run:
```
./db_bench -db=/dev/shm/rocksdb -disable_wal=1 -benchmarks=fillseq,seekrandom[-W1-X6] -reverse_iterator=1 -seek_nexts=5
```
Results:
> Baseline
> - seekrandom [AVG 6 runs] : 96115 ops/sec; 53.2 MB/sec
> - seekrandom [MEDIAN 6 runs] : 98075 ops/sec; 54.2 MB/sec
>
> This PR
> - seekrandom [AVG 6 runs] : 95521 ops/sec; 52.8 MB/sec
> - seekrandom [MEDIAN 6 runs] : 96338 ops/sec; 53.3 MB/sec
2. Enable timestamp, run:
```
./db_bench -user_timestamp_size=8 -db=/dev/shm/rocksdb -disable_wal=1 -benchmarks=fillseq,seekrandom[-W1-X6] -reverse_iterator=1 -seek_nexts=5
```
Result:
> Baseline: not supported
>
> This PR
> - seekrandom [AVG 6 runs] : 90514 ops/sec; 50.1 MB/sec
> - seekrandom [MEDIAN 6 runs] : 90834 ops/sec; 50.2 MB/sec
Pull Request resolved: https://github.com/facebook/rocksdb/pull/8035
Reviewed By: ltamasi
Differential Revision: D26926668
Pulled By: riversand963
fbshipit-source-id: 95330cc2242397c03e09d29e5417dfb0adc98ef5