Skip to main content
A storage layout describes physical partition identity for one L0 data object. Object identity and storage identity are deliberately separate concepts. A StorageLayout is declared under Model.runtime.storage_layouts.
V1 admits at most one primary layout per object. A layout implies nothing about database vendor, node count, replication factor, consistency level, or partition capacity.

StorageLayout shape

  • partition_key is a non-empty list of field paths interpreted against the object’s canonical schema.
  • Object identity and storage identity are distinct: object identity answers “which logical instance,” while the layout answers “into which physical partition.”

Partition key is not a routing key

A partition key and a routing key may reference the same fields without becoming the same concept. They may also deliberately differ:
This means all work for one channel shares an execution-affinity domain while the channel’s data stays distributed across partitions. Conseqa never infers equivalence between routing-domain identity and storage-partition identity merely because their key expressions coincide. It is equally valid for object identity and storage identity to differ:

Full example

StorageLayout example

What a layout does NOT imply

  • Database vendor or product
  • Storage node count or topology
  • Replication factor or replica placement
  • Consistency level or read routing
  • Partition capacity or latency guarantees
These physical and quantitative facts remain outside the Conseqa model.
For how request routing works, see Routers and Pools. For the L0 data model and outbox declarations, see Data Models and Outboxes.