github.com/petermattis/pebble@v0.0.0-20190905164901-ab51a2166067/README.md (about) 1 # DO NOT USE: Pebble is an incomplete work-in-progress. 2 3 # Pebble [![Build Status](https://travis-ci.org/petermattis/pebble.svg?branch=master)](https://travis-ci.org/petermattis/pebble) 4 5 Pebble is a LevelDB/RocksDB inspired key-value store focused on 6 performance and internal usage by CockroachDB. Pebble inherits the 7 RocksDB file formats and a few extensions such as range deletion 8 tombstones, table-level bloom filters, and updates to the MANIFEST 9 format. 10 11 Pebble intentionally does not aspire to include every feature in 12 RocksDB and is specifically targetting the use case and feature set 13 needed by CockroachDB: 14 15 * Block-based tables 16 * Indexed batches 17 * Iterator options (lower/upper bound, table filter) 18 * Level-based compaction 19 * Manual compaction 20 * Merge operator 21 * Prefix bloom filters 22 * Range deletion tombstones 23 * Prefix iteration 24 * Reverse iteration 25 * Snapshots 26 * SSTable ingestion 27 * Table-level bloom filters 28 29 RocksDB has a large number of features that are not implemented in 30 Pebble: 31 32 * Backups and checkpoints 33 * Column families 34 * Delete files in range 35 * FIFO compaction style 36 * Forward iterator / tailing iterator 37 * Hash table format 38 * Memtable bloom filter 39 * Persistent cache 40 * Pin iterator key / value 41 * Plain table format 42 * Single delete 43 * SSTable ingest-behind 44 * Sub-compactions 45 * Transactions 46 * Universal compaction style 47 48 Pebble may silently corrupt data or behave incorrectly if used with a 49 RocksDB database that uses a feature Pebble doesn't support. Caveat 50 emptor! 51 52 ## Advantages 53 54 Pebble offers several improvements over RocksDB: 55 56 * Faster reverse iteration via backwards links in the memtable's 57 skiplist. 58 * Faster commit pipeline that achieves better concurrency. 59 * Seamless merged iteration of indexed batches. The mutations in the 60 batch conceptually occupy another memtable level. 61 * Smaller, more approachable code base. 62 * Pacing of flushes vs compactions: Pebble smooths latency spikes 63 caused by flushes and compactions by only flushing/compacting as 64 fast as necessary to keep up with user writes. 65 66 ## Pedigree 67 68 Pebble is based on the incomplete Go version of LevelDB: 69 70 https://github.com/golang/leveldb 71 72 The Go version of LevelDB is based on the C++ original: 73 74 https://github.com/google/leveldb 75 76 Optimizations and inspiration were drawn from RocksDB: 77 78 https://github.com/facebook/rocksdb