Sled Versions Save

the champagne of beta embedded databases

v0.32

3 years ago

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.

v0.31

4 years ago

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.

0.30.2

4 years ago

New Features

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

v0.30

4 years ago
  • much faster compile speeds after aggressive dependency pruning
  • new storage format
  • bugfixes in cache invalidation and combining transactions with compression

v0.29

4 years ago

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.

0.27

4 years ago

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.

0.26

4 years ago

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.

0.25

4 years ago

0.21.0

5 years ago

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

0.20.0

5 years ago

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.