A library that provides an embeddable, persistent key-value store for fast storage.
Go to file
Andrew Kryczka 7c95868378 Thread-specific ticker statistics
Summary:
The global atomics we previously used for tickers had poor cache performance
since they were typically updated from different threads, causing frequent
invalidations. In this diff,

- recordTick() updates a local ticker value specific to the thread in which it was called
- When a thread exits, its local ticker value is added into merged_sum
- getTickerCount() returns the sum of all threads' local ticker values and the merged_sum
- setTickerCount() resets all threads' local ticker values and sets merged_sum to the value provided by the caller.

In a next diff I will make a similar change for histogram stats.

Test Plan:
before:

  $ TEST_TMPDIR=/dev/shm/ perf record -g ./db_bench --benchmarks=readwhilewriting --statistics --num=1000000 --use_existing_db --threads=64 --cache_size=250000000 --compression_type=lz4
  $ perf report -g --stdio | grep recordTick
  7.59%  db_bench     db_bench             [.] rocksdb::StatisticsImpl::recordTick
  ...

after:

  $ TEST_TMPDIR=/dev/shm/ perf record -g ./db_bench --benchmarks=readwhilewriting --statistics --num=1000000 --use_existing_db --threads=64 --cache_size=250000000 --compression_type=lz4
  $ perf report -g --stdio | grep recordTick
  1.46%  db_bench     db_bench             [.] rocksdb::StatisticsImpl::recordTick
  ...

Reviewers: kradhakrishnan, MarkCallaghan, IslamAbdelRahman, sdong

Reviewed By: sdong

Subscribers: yiwu, andrewkr, dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D62337
2016-08-24 15:42:31 -07:00
arcanist_util Fixes for arcanist config (#1271) 2016-08-11 10:09:43 -07:00
build_tools Make ClockCache available with TSAN build 2016-08-23 13:40:47 -07:00
coverage Fix coverage script 2014-11-03 14:53:00 -08:00
db [Flaky Test] Disable DBPropertiesTest.GetProperty 2016-08-24 15:32:01 -07:00
doc Lint everything 2015-11-16 12:56:21 -08:00
docs Add initial GitHub pages infra for RocksDB documentation move and update. (#1294) 2016-08-24 15:35:38 -07:00
examples Introduce FullMergeV2 (eliminate memcpy from merge operators) 2016-07-20 09:49:03 -07:00
hdfs using java7 in runtime for hdfs env (#1072) 2016-04-12 00:08:26 -04:00
include/rocksdb Option to cache index/filter blocks with priority 2016-08-23 13:44:13 -07:00
java Add singleDelete to RocksJava (#1275) 2016-08-22 11:02:31 -07:00
memtable Updated all copyright headers to the new format. 2016-02-09 15:12:00 -08:00
port stack_trace,cc: The current Stacktrace code does not compile for FreeBSD (#1153) 2016-06-05 17:40:43 -07:00
table fix data race in NewIndexIterator() in block_based_table_reader.cc 2016-08-23 18:20:41 -07:00
third-party Fix clang analyzer errors 2016-07-08 17:50:51 -07:00
tools Disable ClockCache db_crashtest 2016-08-24 14:19:05 -07:00
util Thread-specific ticker statistics 2016-08-24 15:42:31 -07:00
utilities LRU cache mid-point insertion 2016-08-19 16:43:31 -07:00
.arcconfig Integrate Jenkins with Phabricator 2015-04-07 11:56:29 -07:00
.clang-format A script that automatically reformat affected lines 2014-01-14 12:21:24 -08:00
.gitignore Experiments on column-aware encodings 2016-08-01 14:50:19 -07:00
.travis.yml set travis open file descriptor limit 2016-08-08 22:38:04 -07:00
appveyor.yml fix vs generator (#1269) 2016-08-10 09:08:13 -07:00
AUTHORS Add AUTHORS file. Fix #203 2014-09-29 10:52:18 -07:00
CMakeLists.txt LRU cache mid-point insertion 2016-08-19 16:43:31 -07:00
CONTRIBUTING.md facebook accounts are not required for CLA signers 2014-07-08 05:57:54 -04:00
DEFAULT_OPTIONS_HISTORY.md Release RocksDB 4.8.0 2016-05-02 14:38:04 -07:00
DUMP_FORMAT.md First version of rocksdb_dump and rocksdb_undump. 2015-06-19 16:24:36 -07:00
HISTORY.md Introduce ClockCache 2016-08-19 12:28:19 -07:00
INSTALL.md Simple changes to support builds for ppc64[le] consistent with X86 2016-01-19 09:08:19 -06:00
LANGUAGE-BINDINGS.md Update LANGUAGE-BINDINGS.md 2016-07-15 13:09:30 +02:00
LICENSE Updated all copyright headers to the new format. 2016-02-09 15:12:00 -08:00
Makefile LRU cache mid-point insertion 2016-08-19 16:43:31 -07:00
PATENTS Update Patent Grant. 2015-04-13 10:33:43 +01:00
README.md Appveyor badge to show master branch 2016-07-26 13:54:08 -07:00
ROCKSDB_LITE.md Optimistic Transactions 2015-05-29 14:36:35 -07:00
src.mk Add Status to RocksDBException so that meaningful function result Status from the C++ API isn't lost (#1273) 2016-08-22 11:01:42 -07:00
thirdparty.inc Introduce XPRESS compresssion on Windows. (#1081) 2016-04-19 22:54:24 -07:00
USERS.md Update USER.md to include more services at Facebook. 2016-07-06 14:27:08 -07:00
Vagrantfile RocksDB on FreeBSD support 2015-02-26 15:19:17 -08:00
WINDOWS_PORT.md Commit both PR and internal code review changes 2015-07-07 16:58:20 -07:00

RocksDB: A Persistent Key-Value Store for Flash and RAM Storage

Build Status Build status

RocksDB is developed and maintained by Facebook Database Engineering Team. It is built on earlier work on LevelDB by Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com)

This code is a library that forms the core building block for a fast key value server, especially suited for storing data on flash drives. It has a Log-Structured-Merge-Database (LSM) design with flexible tradeoffs between Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF) and Space-Amplification-Factor (SAF). It has multi-threaded compactions, making it specially suitable for storing multiple terabytes of data in a single database.

Start with example usage here: https://github.com/facebook/rocksdb/tree/master/examples

See the github wiki for more explanation.

The public interface is in include/. Callers should not include or rely on the details of any other header files in this package. Those internal APIs may be changed without warning.

Design discussions are conducted in https://www.facebook.com/groups/rocksdb.dev/