There are six stores: hash, b-tree, FIFO, LIFO, heap and blob. A bucket declares each as a field, and every document gets its own.
But: In ring mode a heap store has no push and a blob store has no put yet, and a store's type cannot be changed after it is declared. Indexes are not available in ring mode yet.
Evidence (3)
cli/ringgrammar.go:ringStoreKindscli/ringgrammar.go:ringStoreWordscli/ringstores.go:ringUnwiredStoreVerb
Each store reads back in its own order: a hash by key, a b-tree in key order, a FIFO queue oldest first, a LIFO stack newest first, a heap by priority, a blob as raw bytes.
But: In ring mode a heap store reads by priority but cannot be pushed to yet, and a blob store can be counted but not put to.
Evidence (2)
cli/ringgrammar.go:ringStoreKindscli/ringgrammar.go:ringVerbs
Data lives with what it describes: each user, order or device keeps its own stores, one set for each document, rather than a few big shared ones.
But: How many buckets or documents one node can hold has not been measured. No figure appears on this site until it has.
Evidence (2)
AGENTS.md:The unit is the small bucketcli/ringgrammar.go:ringStoreWords
A field has a type: string, int32, int, double, decimal, number, bool, datetime, bsontimestamp, binary, uuid, objectid, object, array, regex, null or any. A date, a uuid, a decimal, an object id, bytes and a regular expression are written in Extended JSON, such as {$date: "2026-12-01T18:30:00Z"}.
But: A field's type is recorded and shown by describe bucket, but ring mode does not check a written value against it yet. The server does refuse a field name the bucket does not declare.
Evidence (2)
cli/ringgrammar.go:ringScalarWordscluster/wire/ringadmin.go:adminScalarWords
alter bucket adds a field to a running bucket and rewrites no document: existing documents read the new field as unset.
But: A field's type never changes. alter bucket can drop a field, which makes it unreadable at once and deletes its values in the background.
Evidence (2)
cluster/wire/alterb.go:NewAlterBucketTestAlterAddsAFieldAndEveryWriterUsesIt