Batched Write
In Multi-Raft, multiple shards process write requests independently. 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 “batched write” 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, Sorock’s implementation increases throughput without much 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