Releases: spacejam/sled
Releases · spacejam/sled
0.32
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 implementsFuture
(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 aCow
, making a private copy
if the backingArc
's strong count is not 1. - #1020 The sled wiki has been moved into the documentation
itself, and is accessible through thedoc
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 thetransaction
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
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
New Features
- Added the
open
function for quickly opening a database at a path with default configuration.
new storage format and bugfixes
- 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
New Features
- The
Config::open
method has been added to give
Config
a similar feel to std'sfs::OpenOptions
.
TheConfig::build
andDb::start
methods are
now deprecated in favor of callingConfig::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. Anabort
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 simplifiedConfig
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
Breaking Changes
Event::Set
has been renamed toEvent::Insert
and
Event::Del
has been renamed toEvent::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!
0.26
New Features
- Transactions! You may now call
Tree::transaction
and
perform reads, writes, and deletes within a provided
closure with aTransactionalTree
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 onTransactionalTree
instances providing
access to each of the providedTree
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 aBatch
TransactionalTree::apply_batch
allow you to
apply aBatch
from within a transaction.
Breaking Changes
Tree::batch
has been removed. Now you can directly
create aBatch
withBatch::default()
and then apply
it to aTree
withTree::apply_batch
or during a
transaction usingTransactionalTree::apply_batch
.
This facilitates multi-Tree
batches via transactions.Event::Merge
has been removed, andTree::merge
will
now send a completeEvent::Set
item to be distributed
to all listening subscribers.
Write Batches, New Storage Architecture, Fewer Dependencies
Merge pull request #759 from spacejam/tyler_cut_0.25 cut 0.25
GC improvements, more writepath optimizations
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
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.