rocksdb/util
Yueh-Hsuan Chiang 9d9d2965cb Add a new mem-table representation based on cuckoo hash.
Summary:
= Major Changes =
* Add a new mem-table representation, HashCuckooRep, which is based cuckoo hash.
  Cuckoo hash uses multiple hash functions.  This allows each key to have multiple
  possible locations in the mem-table.

  - Put: When insert a key, it will try to find whether one of its possible
    locations is vacant and store the key.  If none of its possible
    locations are available, then it will kick out a victim key and
    store at that location.  The kicked-out victim key will then be
    stored at a vacant space of its possible locations or kick-out
    another victim.  In this diff, the kick-out path (known as
    cuckoo-path) is found using BFS, which guarantees to be the shortest.

 - Get: Simply tries all possible locations of a key --- this guarantees
   worst-case constant time complexity.

 - Time complexity: O(1) for Get, and average O(1) for Put if the
   fullness of the mem-table is below 80%.

 - Default using two hash functions, the number of hash functions used
   by the cuckoo-hash may dynamically increase if it fails to find a
   short-enough kick-out path.

 - Currently, HashCuckooRep does not support iteration and snapshots,
   as our current main purpose of this is to optimize point access.

= Minor Changes =
* Add IsSnapshotSupported() to DB to indicate whether the current DB
  supports snapshots.  If it returns false, then DB::GetSnapshot() will
  always return nullptr.

Test Plan:
Run existing tests.  Will develop a test specifically for cuckoo hash in
the next diff.

Reviewers: sdong, haobo

Reviewed By: sdong

CC: leveldb, dhruba, igor

Differential Revision: https://reviews.facebook.net/D16155
2014-04-29 17:13:46 -07:00
..
arena.cc A heuristic way to check if a memtable is full 2014-03-12 16:40:14 -07:00
arena.h Fix HashSkipList and HashLinkedList SIGSEGV 2014-03-14 10:02:04 -07:00
arena_test.cc Clean up arena API 2014-01-30 22:10:10 -08:00
auto_roll_logger.cc Merge branch 'master' into columnfamilies 2014-04-02 10:48:05 -07:00
auto_roll_logger.h Renamed InfoLogLevel::DEBUG to InfoLogLevel::DEBUG_LEVEL 2014-04-10 15:27:42 -07:00
auto_roll_logger_test.cc Renamed InfoLogLevel::DEBUG to InfoLogLevel::DEBUG_LEVEL 2014-04-10 15:27:42 -07:00
autovector.h RocksDBLite 2014-04-15 13:39:26 -07:00
autovector_test.cc Turn on -Wmissing-prototypes 2014-04-09 21:17:14 -07:00
benchharness.cc Fix more signed/unsigned comparsions 2014-04-29 12:40:18 -07:00
benchharness.h Move benchmark timing to Env::NowNanos() 2014-04-21 17:43:51 -07:00
benchharness_test.cc Fix unsigned and signed integer compare 2014-04-29 12:29:22 -07:00
blob_store.cc RocksDBLite 2014-04-15 13:39:26 -07:00
blob_store.h RocksDBLite 2014-04-15 13:39:26 -07:00
blob_store_test.cc Move the compiler back to 4.8.1 + more small fixes 2013-11-18 11:40:16 -08:00
bloom.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
bloom_test.cc [RocksDB] [Performance Branch] Added dynamic bloom, to be used for memable non-existing key filtering 2013-12-11 00:15:14 -08:00
build_version.h Dont build version if compiling for IOS 2014-04-11 10:54:47 -07:00
cache.cc Merge branch 'master' into performance 2014-01-28 10:35:55 -08:00
cache_test.cc Turn on -Wmissing-prototypes 2014-04-09 21:17:14 -07:00
coding.cc Merge branch 'master' into performance 2014-01-28 10:35:55 -08:00
coding.h Merge branch 'master' into performance 2014-01-28 10:35:55 -08:00
coding_test.cc Misc cleanup on performance branch 2014-01-17 14:26:29 -08:00
comparator.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
crc32c.cc Dynamically choose SSE 4.2 2014-04-04 14:03:19 -07:00
crc32c.h Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
crc32c_test.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
dynamic_bloom.cc dynamicbloom fix: don't offset address when it is already aligned 2014-03-28 17:30:20 -07:00
dynamic_bloom.h cache friendly blocked bloomfilter 2014-03-28 09:21:20 -07:00
dynamic_bloom_test.cc Fix some other signed & unsigned comparisons 2014-04-03 20:51:27 -07:00
env.cc Renamed InfoLogLevel::DEBUG to InfoLogLevel::DEBUG_LEVEL 2014-04-10 15:27:42 -07:00
env_hdfs.cc Enable log info with different levels. 2014-02-26 14:41:28 -08:00
env_posix.cc Fix TransactionLogIterator EOF caching 2014-04-28 23:30:27 -04:00
env_test.cc Rename "benchmark" back to "bench". 2014-04-21 13:12:15 -07:00
filelock_test.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
filter_policy.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
hash.cc Add a hash-index component for block 2014-03-03 21:11:49 -08:00
hash.h Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
hash_cuckoo_rep.cc Add a new mem-table representation based on cuckoo hash. 2014-04-29 17:13:46 -07:00
hash_cuckoo_rep.h Add a new mem-table representation based on cuckoo hash. 2014-04-29 17:13:46 -07:00
hash_linklist_rep.cc kill ReadOptions.prefix and .prefix_seek 2014-04-25 12:21:34 -07:00
hash_linklist_rep.h RocksDBLite 2014-04-15 13:39:26 -07:00
hash_skiplist_rep.cc kill ReadOptions.prefix and .prefix_seek 2014-04-25 12:21:34 -07:00
hash_skiplist_rep.h RocksDBLite 2014-04-15 13:39:26 -07:00
histogram.cc Statistics code cleanup 2014-01-17 12:46:06 -08:00
histogram.h Statistics code cleanup 2014-01-17 12:46:06 -08:00
histogram_test.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
ldb_cmd.cc Support for adding TTL-ed column family 2014-04-28 20:34:20 -07:00
ldb_cmd.h Support for adding TTL-ed column family 2014-04-28 20:34:20 -07:00
ldb_cmd_execute_result.h Revert "Don't compile ldb tool into static library" 2014-04-15 11:29:02 -07:00
ldb_tool.cc RocksDBLite 2014-04-15 13:39:26 -07:00
log_buffer.cc Fix data corruption by LogBuffer 2014-03-21 15:32:48 -07:00
log_buffer.h Fix data race against logging data structure because of LogBuffer 2014-03-11 16:09:53 -07:00
log_write_bench.cc Rename "benchmark" back to "bench". 2014-04-21 13:12:15 -07:00
logging.cc RocksDBLite 2014-04-15 13:39:26 -07:00
logging.h RocksDBLite 2014-04-15 13:39:26 -07:00
manual_compaction_test.cc Fix CompactRange to apply filter to every key 2014-01-14 16:19:09 -08:00
murmurhash.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
murmurhash.h Add a hash-index component for block 2014-03-03 21:11:49 -08:00
mutexlock.h Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
options.cc Renamed InfoLogLevel::DEBUG to InfoLogLevel::DEBUG_LEVEL 2014-04-10 15:27:42 -07:00
perf_context.cc macros for perf_context 2014-04-08 10:58:07 -07:00
perf_context_imp.h macros for perf_context 2014-04-08 10:58:07 -07:00
posix_logger.h Renamed InfoLogLevel::DEBUG to InfoLogLevel::DEBUG_LEVEL 2014-04-10 15:27:42 -07:00
random.h Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
signal_test.cc Print out stack trace in mac, too 2014-04-23 09:11:35 -04:00
skiplistrep.cc make hash_link_list Node's key space consecutively followed at the end 2014-04-04 15:37:28 -07:00
slice.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
statistics.cc convert Tickers back to array with padding and alignment 2014-01-29 15:08:41 -08:00
statistics.h cache SuperVersion in thread local storage to avoid mutex lock 2014-02-27 11:38:55 -08:00
stats_logger.h Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
status.cc IOError cleanup 2014-02-12 11:42:54 -08:00
stl_wrappers.h Killing Transform Rep 2013-12-03 12:42:15 -08:00
stop_watch.h Statistics code cleanup 2014-01-17 12:46:06 -08:00
string_util.cc Turn on -Wmissing-prototypes 2014-04-09 21:17:14 -07:00
string_util.h Turn on -Wmissing-prototypes 2014-04-09 21:17:14 -07:00
sync_point.cc Don't compile sync_point if NDEBUG 2014-04-17 10:49:58 -07:00
sync_point.h Fix ifdef NDEBUG 2014-04-17 14:29:28 -07:00
testharness.cc Better stack trace in MAC 2014-04-25 09:50:51 -04:00
testharness.h Print out stack trace in mac, too 2014-04-23 09:11:35 -04:00
testutil.cc Add appropriate LICENSE and Copyright message. 2013-10-16 17:48:41 -07:00
testutil.h [Performance Branch] PlainTable to encode rows with seqID 0, value type using 1 internal byte. 2014-02-03 12:19:30 -08:00
thread_local.cc simplify ThreadLocalPtr a little bit 2014-04-22 21:13:34 -07:00
thread_local.h simplify ThreadLocalPtr a little bit 2014-04-22 21:13:34 -07:00
thread_local_test.cc simplify ThreadLocalPtr a little bit 2014-04-22 21:13:34 -07:00
vectorrep.cc RocksDBLite 2014-04-15 13:39:26 -07:00