Batched Write
In multi-raft, multiple shards process write requests. Conceptually, each shard maintains its own log for entry insertion.
Having a physically independent log for each shard isn't efficient as each write requires a transaction to persist the data on the storage.
However, an optimization technique called "batching" can be used. Here, each shard maintains a virtual log, and the entries are temporarily queued in a shared queue. These queued entries are then processed in a single transaction, reducing the number of transactions.
This approach often presents a throughput versus latency dilemma. However, this implementation increases throughput without sacrificing latency.
graph LR
CLI(Client)
subgraph P1
T1(redb::Table)
end
subgraph P2
T2(redb::Table)
end
subgraph P3
T3(redb::Table)
end
subgraph Reaper
Q(Queue)
end
DB[(redb::Database)]
CLI -->|entry| T1
CLI --> T2
CLI --> T3
T1 -->|lazy entry| Q
T2 --> Q
T3 --> Q
Q -->|transaction| DB