Use shorten index key for hash-index

Summary:
I was wrong about the "index builder", right now since we create index
by scanning both whole table and index, there is not need to preserve
the whole key as the index key.

I switch back to original way index which is both space efficient and
able to supprot in-fly construction of hash index.

IN this patch, I made minimal change since I'm not sure if we still need
the "pluggable index builder", under current circumstance it is of no use
and kind of over-engineered. But I'm not sure if we can still exploit its
usefulness in the future; otherwise I think I can just burn them with great
vengeance.

Test Plan: unit tests

Reviewers: sdong, haobo

CC: leveldb

Differential Revision: https://reviews.facebook.net/D17745
This commit is contained in:
Kai Liu 2014-04-10 17:23:49 -07:00
parent b3d7435b4e
commit e23e73e67c

View File

@ -88,8 +88,7 @@ class IndexBuilder {
const Comparator* comparator_; const Comparator* comparator_;
}; };
// This index builder builds space-efficient index block for binary-search-based // This index builder builds space-efficient index block.
// index.
// //
// Optimizations: // Optimizations:
// 1. Made block's `block_restart_interval` to be 1, which will avoid linear // 1. Made block's `block_restart_interval` to be 1, which will avoid linear
@ -130,7 +129,6 @@ class ShortenedIndexBuilder : public IndexBuilder {
// FullKeyIndexBuilder is also based on BlockBuilder. It works pretty much like // FullKeyIndexBuilder is also based on BlockBuilder. It works pretty much like
// ShortenedIndexBuilder, but preserves the full key instead the substitude key. // ShortenedIndexBuilder, but preserves the full key instead the substitude key.
// with the reason being that hash index is based on "prefix".
class FullKeyIndexBuilder : public IndexBuilder { class FullKeyIndexBuilder : public IndexBuilder {
public: public:
explicit FullKeyIndexBuilder(const Comparator* comparator) explicit FullKeyIndexBuilder(const Comparator* comparator)
@ -162,7 +160,7 @@ IndexBuilder* CreateIndexBuilder(IndexType type, const Comparator* comparator) {
return new ShortenedIndexBuilder(comparator); return new ShortenedIndexBuilder(comparator);
} }
case BlockBasedTableOptions::kHashSearch: { case BlockBasedTableOptions::kHashSearch: {
return new FullKeyIndexBuilder(comparator); return new ShortenedIndexBuilder(comparator);
} }
default: { default: {
assert(!"Do not recognize the index type "); assert(!"Do not recognize the index type ");