Skip to main content

Crate evento_fjall

Crate evento_fjall 

Source
Expand description

Fjall embedded key-value store implementation for evento.

This crate provides an Executor implementation using fjall, an LSM-tree based embedded key-value storage engine.

§Features

  • Embedded storage - No external database server required
  • LSM-tree based - Optimized for write-heavy workloads
  • Atomic writes - Cross-partition transactional semantics
  • Efficient range scans - Fast prefix and range queries

§Example

use evento_fjall::Fjall;
use evento_core::{Executor, metadata::Metadata, cursor::Args, ReadAggregator};

// Define events using an enum
#[evento::aggregator]
pub enum User {
    UserCreated { name: String },
}

// Open the database
let executor = Fjall::open("./my-events")?;

// Create events
let id = evento::create()
    .event(&UserCreated { name: "Alice".into() })
    .metadata(&Metadata::default())
    .commit(&executor)
    .await?;

// Query events
let events = executor.read(
    Some(vec![ReadAggregator::id("user/User", &id)]),
    None,
    Args::forward(10, None),
).await?;

§Data Model

Events are stored across multiple partitions for efficient querying:

  • events - Primary storage: ULID -> Event
  • agg_index - Aggregate index: {type}\0{id}\0{version} -> ULID
  • routing_index - Routing key index: {routing_key}\0{ULID} -> ()
  • type_index - Event type index: {type}\0{name}\0{ULID} -> ()
  • subscribers - Subscription state: {key} -> SubscriberState

Structs§

Fjall
Fjall-based event store executor.