From 7dd1641048bde2e45c3e16d2e7b450b3914df1f4 Mon Sep 17 00:00:00 2001 From: Abhishek Madan Date: Thu, 11 Oct 2018 15:27:29 -0700 Subject: [PATCH] Use vector in UncollapsedRangeDelMap (#4487) Summary: Using `./range_del_aggregator_bench --use_collapsed=false --num_range_tombstones=5000 --num_runs=1000`, here are the results before and after this change: Before: ``` ========================= Results: ========================= AddTombstones: 1822.61 us ShouldDelete (first): 94.5286 us ``` After: ``` ========================= Results: ========================= AddTombstones: 199.26 us ShouldDelete (first): 38.9344 us ``` Pull Request resolved: https://github.com/facebook/rocksdb/pull/4487 Differential Revision: D10347288 Pulled By: abhimadan fbshipit-source-id: d44efe3a166d583acfdc3ec1199e0892f34dbfb7 --- db/range_del_aggregator.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/db/range_del_aggregator.cc b/db/range_del_aggregator.cc index f25a149d1..58ab3f5e4 100644 --- a/db/range_del_aggregator.cc +++ b/db/range_del_aggregator.cc @@ -37,8 +37,7 @@ struct ParsedInternalKeyComparator { // An UncollapsedRangeDelMap is quick to create but slow to answer ShouldDelete // queries. class UncollapsedRangeDelMap : public RangeDelMap { - typedef std::multiset - Rep; + typedef std::vector Rep; class Iterator : public RangeDelIterator { const Rep& rep_; @@ -70,7 +69,7 @@ class UncollapsedRangeDelMap : public RangeDelMap { public: explicit UncollapsedRangeDelMap(const InternalKeyComparator* icmp) - : rep_(TombstoneStartKeyComparator(icmp)), icmp_(icmp) {} + : icmp_(icmp) {} bool ShouldDelete(const ParsedInternalKey& parsed, RangeDelPositioningMode mode) override { @@ -78,7 +77,7 @@ class UncollapsedRangeDelMap : public RangeDelMap { assert(mode == RangeDelPositioningMode::kFullScan); for (const auto& tombstone : rep_) { if (icmp_->Compare(parsed, tombstone.start_key_) < 0) { - break; + continue; } if (parsed.sequence < tombstone.seq_ && icmp_->Compare(parsed, tombstone.end_key_) < 0) { @@ -101,7 +100,7 @@ class UncollapsedRangeDelMap : public RangeDelMap { } void AddTombstone(TruncatedRangeTombstone tombstone) override { - rep_.emplace(tombstone); + rep_.emplace_back(tombstone); } size_t Size() const override { return rep_.size(); } @@ -109,6 +108,7 @@ class UncollapsedRangeDelMap : public RangeDelMap { void InvalidatePosition() override {} // no-op std::unique_ptr NewIterator() override { + std::sort(rep_.begin(), rep_.end(), TombstoneStartKeyComparator(icmp_)); return std::unique_ptr(new Iterator(this->rep_)); } };