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