Skip to content

Releases: cberner/redb

0.17.0

09 May 16:04
Compare
Choose a tag to compare
  • Enforce a limit of 3GiB on keys & values
  • Fix database corruption bug that could occur if a Durability::None commit was made,
    followed by a durable commit and the durable commit crashed or encountered an I/O error during commit()
  • Fix panic when re-openning a database file, when the process that last had it open had crashed
  • Fix several bugs where an I/O error during commit() could cause a panic instead of returning an Err
  • Change length argument to insert_reserve() to u32
  • Change Table::len() to return u64
  • Change width of most fields in DatabaseStats to u64
  • Remove K type parameter from AccessGuardMut
  • Add Database::compact() which compacts the database file
  • Performance optimizations

0.16.0

29 Apr 03:23
Compare
Choose a tag to compare
  • Combine Builder::set_read_cache_size() and Builder::set_write_cache_size() into a single,
    Builder::set_cache_size() setting
  • Relax lifetime constraints on read methods on tables
  • Optimizations to Savepoint

0.15.0

28 Apr 16:37
Compare
Choose a tag to compare
  • Add Database::check_integrity() to explicitly run repair process (it is still always run if needed on db open)
  • Change list_tables() to return a TableHandle
  • Change delete_table() to take a TableHandle
  • Make insert_reserve() API signature type safe
  • Change all iterators to return Result and propagate I/O errors
  • Replace WriteStrategy with Durability::Paranoid
  • Remove Builder::set_initial_size()
  • Enable db file shrinking on Windows
  • Performance optimizations

0.14.0

26 Mar 19:30
Compare
Choose a tag to compare
  • Remove Builder::create_mmapped() and Builder::open_mmapped(). The mmap backend has been removed
    because it was infeasible to prove that it was sound. This makes the redb API entirely safe,
    and the remaining File based backed is within a factor of ~2x on all workloads that I've benchmarked
  • Make Table implement Send. It is now possible to insert into multiple Tables concurrently
  • Expose AccessGuardMut, Drain and DrainFilter in the public API
  • Rename RangeIter to Range
  • RenameMultimapRangeIter to MultimapRange
  • Rename MultimapValueIter to MultimapValue
  • Performance optimizations

0.13.0

05 Feb 18:03
Compare
Choose a tag to compare
  • Fix a major data corruption issue that was introduced in version 0.12.0. It caused databases
    greater than ~4GB to become irrecoverably corrupted due to an integer overflow in PageNumber::address_range
    that was introduced by commit b2c44a824d1ba69f526a1a75c56ae8484bae7248
  • Add drain_filter() to Table
  • Make key and value type bounds more clear for tables

0.12.1

22 Jan 19:37
Compare
Choose a tag to compare

This version contains a known data corruption bug (fixed by #516) and SHOULD NOT be used

Changes:

  • Fix open() on platforms with OS page size != 4KiB
  • Relax lifetime requirements on argument to range() and drain()

0.12.0

22 Jan 00:53
Compare
Choose a tag to compare

This version contains a known data corruption bug (fixed by #516) and SHOULD NOT be used

Changes:

  • Add pop_first() and pop_last() to Table
  • Add drain() to Table
  • Add support for Option<T> as a value type
  • Add support for user defined key and value types. Users must implement RedbKey and/or RedbValue
  • Change get(), insert(), remove()...etc to take arguments of type impl Borrow<SelfType>
  • Return Error::UpgradeRequired when opening a file with an outdated file format
  • Improve support for 32bit platforms
  • Performance optimizations

0.11.0

14 Jan 22:20
Compare
Choose a tag to compare
  • Remove [u8] and str type support. Use &[u8] and &str instead.
  • Change get(), range() and several other methods to return AccessGuard.
  • Rename AccessGuard::to_value() to value()
  • Add a non-mmap based backend which is now the default. This makes Database::create() and
    Database::open() safe, but has worse performance in some cases. The mmap backend is available
    via create_mmapped()/open_mmapped(). There is no difference in the file format, so applications
    can switch from one backend to the other.
  • Better handling of fsync failures

0.10.0

24 Nov 05:38
Compare
Choose a tag to compare
  • Remove maximum database size argument from create(). Databases are now unbounded in size
  • Reduce address space usage on Windows
  • Remove set_dynamic_growth()
  • Add set_initial_size() to Builder
  • Optimize cleanup of deleted pages. This resolves a performance issue where openning a Database
    or performing a small transaction, could be slow if the last committed transaction deleted a large
    number of pages
  • Remove set_page_size(). 4kB pages are always used now
  • Add iter() method to Table and MultimapTable
  • Fix various lifetime issues with type that had a lifetime, such as &str and (&[u8], u64)

0.9.0

05 Nov 16:40
Compare
Choose a tag to compare
  • Add support for dynamic file growth on Windows
  • Add support for tuple types as keys and values
  • Remove Builder::set_region_size
  • Save lifetime from Savepoint
  • Fix crash when using create() to open an existing database created with WriteStrategy::TwoPhase
  • Fix rare crash when writing a mix of small and very large values into the same table
  • Performance optimizations