| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
- // This source code is licensed under both the GPLv2 (found in the
- // COPYING file in the root directory) and Apache 2.0 License
- // (found in the LICENSE.Apache file in the root directory).
- #pragma once
- #include <stdint.h>
- #include "rocksdb/status.h"
- namespace ROCKSDB_NAMESPACE {
- class Comparator;
- class Iterator;
- class Slice;
- class SliceTransform;
- // Build a hash-based index to speed up the lookup for "index block".
- // BlockHashIndex accepts a key and, if found, returns its restart index within
- // that index block.
- class BlockPrefixIndex {
- public:
- // Maps a key to a list of data blocks that could potentially contain
- // the key, based on the prefix.
- // Returns the total number of relevant blocks, 0 means the key does
- // not exist.
- uint32_t GetBlocks(const Slice& key, uint32_t** blocks);
- size_t ApproximateMemoryUsage() const {
- return sizeof(BlockPrefixIndex) +
- (num_block_array_buffer_entries_ + num_buckets_) * sizeof(uint32_t);
- }
- // Create hash index by reading from the metadata blocks.
- // @params prefixes: a sequence of prefixes.
- // @params prefix_meta: contains the "metadata" to of the prefixes.
- static Status Create(const SliceTransform* hash_key_extractor,
- const Slice& prefixes, const Slice& prefix_meta,
- BlockPrefixIndex** prefix_index);
- ~BlockPrefixIndex() {
- delete[] buckets_;
- delete[] block_array_buffer_;
- }
- private:
- class Builder;
- friend Builder;
- BlockPrefixIndex(const SliceTransform* internal_prefix_extractor,
- uint32_t num_buckets, uint32_t* buckets,
- uint32_t num_block_array_buffer_entries,
- uint32_t* block_array_buffer)
- : internal_prefix_extractor_(internal_prefix_extractor),
- num_buckets_(num_buckets),
- num_block_array_buffer_entries_(num_block_array_buffer_entries),
- buckets_(buckets),
- block_array_buffer_(block_array_buffer) {}
- const SliceTransform* internal_prefix_extractor_;
- uint32_t num_buckets_;
- uint32_t num_block_array_buffer_entries_;
- uint32_t* buckets_;
- uint32_t* block_array_buffer_;
- };
- } // namespace ROCKSDB_NAMESPACE
|