NEWVectors or files. Pick a path.Start →
    Back to DiagramsArchitecture

    Write-Ahead Logs on Object Storage: The MVS Write Path

    The acknowledgement happens at the log, before indexing. Everything downstream reads the same sequenced chain of objects in your own bucket.

    A three-band architecture diagram of the Mixpeek Vector Store write path on object storage. The top band runs left to right: a client write of an upsert or delete, into a write-ahead log where the append happens and the acknowledgement returns, then a segment sealing as immutable, then shipping to object storage. A callout under the log reads that the acknowledgement happens there and not after indexing, and a dashed box spanning the seal and ship steps marks a leader fence on the append as planned rather than shipped. The middle band is your object storage, an S3 or GCS bucket holding one sequenced object per sealed segment at the path wal slash namespace slash shard slash sequence dot wal, drawn as a row of numbered segments with the two oldest greyed. Beside them, snapshots compact the chain and commit to object storage, and a garbage-collection gate states that a segment is deleted only once its writes are provably inside a committed snapshot. The bottom band fans out to three readers of the same chain: recovery, which takes the latest snapshot plus a replay of shipped segments; replicas, which tail the chain to stay in sync; and change data capture, which reads the chain as an event feed.
    The acknowledgement happens at the log, before indexing. Everything downstream reads the same sequenced chain of objects in your own bucket.

    A write-ahead log is the oldest trick in durable storage: before you change anything, you append what you are about to do to a log, and you do not tell the caller you succeeded until that append lands. Recovery then means replaying the log.

    Putting that log on object storage changes what it can be. A local log is a durability mechanism for one machine. A log written to S3 or GCS as a sequence of immutable objects is a shared artifact, and anything that can list a bucket can read it.

    MVS writes land in a write-ahead log, and the acknowledgement returns there. That is the beat most people get wrong. The ack does not wait for indexing, so write latency is not coupled to how expensive the index is to update.

    Sealed segments ship to object storage as sequenced objects under wal/{namespace}/{shard}/{sequence}.wal. The sequence number is doing real work: a monotonic filename is its own conflict detector, so ordering inside a shard is a property of the naming rather than of a coordinator.

    Snapshots compact the chain, and a garbage-collection gate decides what may be deleted. A segment is removed only once its writes are provably inside a committed snapshot. The interesting part is what happens when that proof is unavailable: the gate holds the segment rather than assuming, so a stuck snapshot frontier costs disk instead of data.

    Three readers share the chain. Recovery replays shipped segments on top of the last snapshot. Replicas tail it to stay in sync. Change data capture reads the same objects as an event feed. None of them need a private channel to the writer, because the log is the interface.

    One thing the diagram marks as planned rather than shipped: a leader fence on the append. Today the segment writes are unconditional, which means a deposed writer that has not yet learned it was deposed could in principle overwrite a sequence the real leader wrote. Conditional, create-only writes close that, and the diagram draws it dashed until they do.

    Where this diagram appears

    Your bucket is the database

    Dense, sparse and BM25 search on the object storage you already own.

    Explore MVS