The KV Store is StrataDB’s most general-purpose primitive. It maps string keys to arbitrary values with simple put/get/delete semantics.

Command Overview

CommandSyntaxReturns
kv putkv put <key> <value>Version number
kv getkv get <key>The value, or (nil)
kv delkv del <key>OK
kv listkv list [--prefix P] [--limit N] [--cursor C]Matching key names
kv historykv history <key>Version history

Put

kv put creates or overwrites a key. It returns the version number of the write.

$ strata --cache
strata:default/default> kv put name Alice
(version) 1
strata:default/default> kv put age 30
(version) 1
strata:default/default> kv put score 99.5
(version) 1
strata:default/default> kv put active true
(version) 1
strata:default/default> kv put counter 1
(version) 1
strata:default/default> kv put counter 2
(version) 2

The CLI auto-detects types from input format (strings, integers, floats, booleans).

Get

kv get returns the latest value for a key, or (nil) if the key doesn’t exist.

$ strata --cache
strata:default/default> kv put key value
(version) 1
strata:default/default> kv get key
"value"
strata:default/default> kv get nonexistent
(nil)

Delete

kv del removes a key.

$ strata --cache
strata:default/default> kv put key value
(version) 1
strata:default/default> kv del key
OK
strata:default/default> kv get key
(nil)

List Keys

kv list returns all keys, optionally filtered by prefix.

$ strata --cache
strata:default/default> kv put user:1 Alice
(version) 1
strata:default/default> kv put user:2 Bob
(version) 1
strata:default/default> kv put task:1 Review
(version) 1
strata:default/default> kv list
task:1 = "Review"
user:1 = "Alice"
user:2 = "Bob"
strata:default/default> kv list --prefix user:
user:1 = "Alice"
user:2 = "Bob"

Key Naming Conventions

Use colon-separated namespaces for organized key spaces:

$ strata --cache
strata:default/default> kv put user:123:name Alice
(version) 1
strata:default/default> kv put user:123:email alice@example.com
(version) 1
strata:default/default> kv put config:model gpt-4
(version) 1
strata:default/default> kv put config:temperature 0.7
(version) 1
strata:default/default> kv list --prefix user:123:
user:123:email = "alice@example.com"
user:123:name = "Alice"
strata:default/default> kv list --prefix config:
config:model = "gpt-4"
config:temperature = 0.7

Branch Isolation

KV data is isolated by branch. See Branches for details.

$ strata --cache
strata:default/default> kv put key default-value
(version) 1
strata:default/default> branch create other
OK
strata:default/default> use other
strata:other/default> kv get key
(nil)

Space Isolation

Within a branch, KV data is further organized by space. Each space has independent keys:

$ strata --cache
strata:default/default> kv put config default-value
(version) 1
strata:default/default> use default experiments
strata:default/experiments> kv get config
(nil)
strata:default/experiments> kv put config experiment-value
(version) 1
strata:default/experiments> use default
strata:default/default> kv get config
"default-value"

See Spaces for the full guide.

Transactions

KV operations participate in transactions. Within a transaction, reads and writes are atomic:

$ strata --cache
strata:default/default> begin
OK
strata:default/default> kv put a 1
(version) 1
strata:default/default> kv put b 2
(version) 1
strata:default/default> commit
OK

Both writes become visible atomically. See Sessions and Transactions for the full guide.

Next