Roadmap
This is a living document containing the FASTER team’s priorities as well as release notes for previous releases. Items refer to FASTER C# unless indicated otherwise. For C++ info, scroll to C++ Porting Notes.
(Scroll to Release Notes)
Past and Future Work
The following is a summary of the FASTER team’s past work and backlog for the next 6 months. Completed items are included to provide the context and progress of the work.
Past Work
General
- Full Read, Upsert, RMW functionality
- Bulk delete via key expiry: user-initiated truncation from head of log (ShiftBeginAddress)
- Persistence support for larger-than-memory data
- Scan operation support for scanning a specified range of log
- Ability to resize (grow) the hash table in powers of two (user-initiated)
- Separately configurable optional read cache for read-heavy workloads
- Support for separate user-defined object hash/equality comparers and object serializers
- Remove C# dynamic code-gen for quicker instantiation, stability, debuggability
- Full support for .NET core and Linux/Mac
- Individual key delete support
- Support iteration over all and only live key-value pairs (different from log scan)
- Full support for async interface to FasterKV
- Full support for async/await threading model in C#: PR
IFunctions
specified via sessions- Remove generic type constraints, add default serializers and comparers for common types
Log, Cache, and Storage
- Variable sized keys and values using separate object log, see [here]
- Two allocators (specializing for Blittable and Generic key-value types), with common extensible base class
- Generic IDevice abstraction with out-of-the-box implementations for local storage
- Segmented log on storage (log file broken into segments of configurable size)
- Allocator support for copying reads to tail, useful for update-intensive workloads
- Highly configurable allocator parameters (log and read cache) with respect to memory size, page size, mutable fraction of memory, etc.
- Support for runtime shifting of address markers (e.g., begin, head, read-only) for dynamic tuning of memory contents of allocators (log and read cache).
- Log compaction by rolling forward older active keys
- Support for subscribing to the hybrid log (push-based, as record batches become read-only): PR
- Support for callback when records in hybrid log become read-only: PR
- Support for cloud storage, starting with Azure Page Blobs: PR
- Support for tiered storage: PR
- Support for sharded storage: PR
- Support for FasterLog as an independent first-class abstraction: PR
- Reduced log memory footprint significantly (min pages in memory reduced to 1)
- Improved performance of fine-grained epoch protection
- Support per-entry checksums and persistent iterators in FasterLog
- Full support for async interface to FasterLog
- Improved
IDevice
v2 interface withoutOverlapped
, improved local storage scalability
Checkpoint and Recovery
- CPR-based checkpointing and recovery (snapshot and fold-over modes), see [here] for details
- Optional separate checkpointing of index and log (so that index may be checkpointed less frequently)
- Auto-recover to most recent checkpoint
- Make checkpointing use a pluggable user-specified interface for providing devices and performing metadata commit: PR
- Generic state machine for checkpointing (internals)
- Choose checkpoint type (Snapshot and FoldOver) on a per-checkpoint basis
- Process all checkpoints through a
IDevice
-based checkpoint and log commit manager - Limit number of preloaded pages during recovery: PR
Ongoing and Future Work
- Look for key via chain starting at given logical addresses: PR
- Read record directly via logical address: PR
- Client-server interface to FASTER
- Scale-out and elasticity support
- RDMA
IDevice
implementation - Support for Incremental Snapshot checkpoint type
- Expose incremental data structures over FasterKV hash chains
- Handle log logical addresses greater than 48 bit (up to 64 bit)
- Checksums for storage pages
Release Notes
Find all recent release notes via our releases page here. Older release notes are below:
FASTER v2019.10.31.1
- Support for FasterLog as an independent first-class abstraction: PR
- Reduced log memory footprint significantly (min pages in memory reduced to 1)
- Improved performance of fine-grained epoch protection
- Support per-entry checksums and persistent iterators in FasterLog
- Full support for async interface to FasterLog
FASTER v2019.8.27.1
- Improved support for varlen blittable allocator (iteration, compaction): PR
- BREAKING CHANGE: change return type for InPlaceUpdater and ConcurrentWriter functions to bool. User has to return true for usual in-place-update (IPU) behavior, and return false to force retry as read-copy-update (RCU).
- Support for cloud storage, starting with Azure Page Blobs: PR
- Support for tiered storage: PR
- Make checkpointing use a pluggable user-specified interface for providing devices and performing metadata commit: PR
- Support for sharded storage: PR
FASTER v2019.7.23.1
- Object log recovery bug fix: PR
- Option to enable file buffering for local storage device
- Optimizing what is loaded to hybrid log memory during recovery (prior head address onwards only)
- Removing direct call of callback when IO completes synchronously: PR
- Fixed checkpoint recovery bug: PR
- Adding FILE_SHARE_DELETE when deleteOnClose is used: PR
- Support for callback when records in hybrid log become read-only: PR
FASTER v2019.4.24.4
- Added support for variable sized (inline) structs without object log: PR
- Removed statics from codebase to better support multiple instances: PR
- Fixes related to scheduling pending operations: PR
FASTER v2019.4.1.1
FASTER v2019.3.16.1 (cumulative feature list)
- Full Read, Upsert, RMW functionality
- Bulk delete via key expiry: user-initiated truncation from head of log (ShiftBeginAddress)
- Persistence support for larger-than-memory data
- Scan operation support for scanning a specified range of log
- Ability to resize (grow) the hash table in powers of two (user-initiated)
- Separately configurable optional read cache for read-heavy workloads
- Support for separate user-defined object hash/equality comparers and object serializers
- Remove C# dynamic code-gen for quicker instantiation, stability, debuggability
- Full support for .NET core and Linux/Mac
- Experimental feature: DeleteFromMemory to delete recently added keys that are still in memory
- Variable sized keys and values using separate object log, see [here]
- Two allocators (specializing for Blittable and Generic key-value types), with common extensible base class
- Generic IDevice abstraction with out-of-the-box implementations for local storage
- Segmented log on storage (log file broken into segments of configurable size)
- Allocator support for copying reads to tail, useful for update-intensive workloads
- Highly configurable allocator parameters (log and read cache) with respect to memory size, page size, mutable fraction of memory, etc.
- Support for runtime shifting of address markers (e.g., begin, head, read-only) for dynamic tuning of memory contents of allocators (log and read cache).
- CPR-based checkpointing and recovery (snapshot and fold-over modes), see [here] for details
- Optional separate checkpointing of index and log (so that index may be checkpointed less frequently)
- Auto-recover to most recent checkpoint
C++ Porting Notes
FASTER C++ is a fairly direct port of FASTER C# using C++ based coding and style guidelines. It supports the following features as of now:
- Full Read, Upsert, RMW functionality
- Persistence support for larger-than-memory data
- Variable sized payloads; no separate object log, see [here]
- Log segments on storage, with truncation from head of log
- CPR-based checkpointing and recovery (both snapshot and fold-over modes), see [here]
- Ability to resize the hash table
- C++: Added a new
value_size()
method toRmwContext
for RCU operations: PR - Azure storage device: PR