Skip to content

Releases: spacejam/sled

0.32

20 Jun 17:08
28700b3
Compare
Choose a tag to compare

New Features

  • #1079 Transactional is now implemented for
    [&Tree] and [Tree] so you can avoid the
    previous friction of using tuples, as was
    necessary previously.
  • #1058 The minimum supported Rust version (MSRV)
    is now 1.39.0.
  • #1037 Subscriber now implements Future (non-fused)
    so prefix watching may now be iterated over via
    while let Some(event) = (&mut subscriber).await {}

Improvements

  • A large number of crash consistency issues have
    been discovered during intensive testing and fixed.
  • #965 concurrency control is now dynamically enabled
    for atomic point operations, so that it may be
    avoided unless transactional functionality is
    being used in the system. This significantly
    increases performance for workloads that do not
    use transactions.
  • A number of memory optimizations have been implemented.
  • Disk usage has been significantly reduced for many
    workloads.
  • #1016 On 64-bit systems, we can now store 1-2 trillion items.
  • #993 Added DerefMut and AsMut<[u8]> for IVec where it
    works similarly to a Cow, making a private copy
    if the backing Arc's strong count is not 1.
  • #1020 The sled wiki has been moved into the documentation
    itself, and is accessible through the doc module
    exported in lib.

Breaking Changes

  • #975 Changed the default segment_size from 8m to 512k.
    This will result in far smaller database files due
    to better file garbage collection granularity.
  • #975 deprecated several Config options that will be
    removed over time.
  • #1000 rearranged some transaction-related imports, and
    moved them to the transaction module away from
    the library root to keep the top level docs clean.
  • #1015 TransactionalTree::apply_batch now accepts
    its argument by reference instead of by value.
  • Event has been changed to make the inner fields
    named instead of anonymous.
  • #1057 read-only mode has been removed due to not having
    the resources to properly keep it tested while
    making progress on high priority issues. This may
    be correctly implemented in the future if resources
    permit.

varints, read and recovery optimizations

31 Jan 10:16
d52480a
Compare
Choose a tag to compare

0.31

Improvements

  • #947 dramatic read and recovery optimizations
  • #921 reduced the reliance on locks while
    performing multithreaded IO on windows.
  • #928 use sync_file_range on linux instead
    of a full fsync for most writes.
  • #946 io_uring support changed to the rio crate
  • #939 reduced memory consumption during
    zstd decompression

Breaking Changes

  • #927 use SQLite-style varints for serializing
    u64. This dramatically reduces the written
    bytes for databases that store small keys and
    values.
  • #943 use varints for most of the fields in
    message headers, causing an additional large
    space reduction. combined with #927, these
    changes reduce bytes written by 68% for workloads
    writing small items.

sled::open replaces sled::Db::open

27 Dec 10:58
e46a144
Compare
Choose a tag to compare

New Features

  • Added the open function for quickly opening a database at a path with default configuration.

new storage format and bugfixes

13 Dec 17:23
d8196dd
Compare
Choose a tag to compare
  • much faster compile speeds after aggressive dependency pruning
  • new storage format
  • bugfixes in cache invalidation and combining transactions with compression

Config, Transaction, and Opening Revamp

16 Oct 15:33
dfbec0b
Compare
Choose a tag to compare

New Features

  • The Config::open method has been added to give
    Config a similar feel to std's fs::OpenOptions.
    The Config::build and Db::start methods are
    now deprecated in favor of calling Config::open
    directly
  • A checksum method has been added to Tree and Db
    for use in verifying backups and migrations.
  • Transactions may now involve up to 69 different
    tables. Nice.
  • The TransactionError::Abort variant has had
    a generic member added that can be returned
    as a way to return information from a
    manually-aborted transaction. An abort helper
    function has been added to reduce the boiler-
    plate required to return aborted results.

Breaking Changes

  • The ConfigBuilder structure has been removed
    in favor of a simplified Config structure
    with the same functionality.
  • The way that sled versions are detected at
    initialization time is now independent of serde.
  • The cas method is deprecated in favor of the new
    compare_and_swap method which now returns the
    proposed value that failed to be applied.
  • Tree nodes now have constant prefix encoding
    lengths.
  • The io_buf_size configurable renamed to
    segment_size.
  • The io_buf_size configurable method has been
    removed from ConfigBuilder. This can be manually
    set by setting the attribute directly on the
    ConfigBuilder, but this is discouraged.
    Additionally, this must now be a power of 2.
  • The page_consolidation_threshold method has been
    removed from ConfigBuilder, and this is now
    a constant of 10.

async flush, bugfixes, event variant rename

08 Sep 15:27
d20fbc1
Compare
Choose a tag to compare

Breaking Changes

  • Event::Set has been renamed to Event::Insert and
    Event::Del has been renamed to Event::Remove. These
    names better align with the methods of BTreeMap from
    the standard library.

Bug Fixes

  • A deadlock was possible in very high write volume
    situations when the segment accountant lock was
    taken by all IO threads while a task was blocked
    trying to submit a file truncation request to the
    threadpool while holding the segment accountant lock.

New Features

  • flush_async has been added to perform time-intensive
    flushing in an asynchronous manner, returning a Future.

Transactions!

19 Aug 19:42
4e5370f
Compare
Choose a tag to compare

0.26

New Features

  • Transactions! You may now call Tree::transaction and
    perform reads, writes, and deletes within a provided
    closure with a TransactionalTree argument. This
    closure may be called multiple times if the transaction
    encounters a concurrent update in the process of its
    execution. Transactions may also be used on tuples of
    Tree objects, where the closure will then be
    parameterized on TransactionalTree instances providing
    access to each of the provided Tree instances. This
    allows you to atomically read and modify multiple
    Tree instances in a single atomic operation.
    These transactions are serializable, fully ACID,
    and optimistic.
  • Tree::apply_batch allows you to apply a Batch
  • TransactionalTree::apply_batch allow you to
    apply a Batch from within a transaction.

Breaking Changes

  • Tree::batch has been removed. Now you can directly
    create a Batch with Batch::default() and then apply
    it to a Tree with Tree::apply_batch or during a
    transaction using TransactionalTree::apply_batch.
    This facilitates multi-Tree batches via transactions.
  • Event::Merge has been removed, and Tree::merge will
    now send a complete Event::Set item to be distributed
    to all listening subscribers.

Write Batches, New Storage Architecture, Fewer Dependencies

15 Aug 10:53
e3b019a
Compare
Choose a tag to compare
Merge pull request #759 from spacejam/tyler_cut_0.25

cut 0.25

GC improvements, more writepath optimizations

01 Apr 17:54
6ecc3d9
Compare
Choose a tag to compare

This release brings big improvements to the underlying GC system for keeping file sizes under control, as well as some optimizations for the writepath.

API cleanup, writepath optimizations

25 Mar 08:39
6ce3e12
Compare
Choose a tag to compare

This release includes a large number of internal and external API cleanups. Some internal CAS-like operations will retry automatically when they fail due to changes that do not impact causality, like rewriting the same page to a new location. When CAS-like operations fail, they now return the new value that was created to insert in the first place, removing several double allocations. Lots of performance improvements.