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 -> Eventagg_index- Aggregate index:{type}\0{id}\0{version}->ULIDrouting_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.