Editorial illustration in suprematism-minimal style depicting a Suprematism pair of diverging FHIR growth lines with a vermilion gap marker between history and current state

History Table vs Current State: Doubling Your Storage Bill Quietly

FHIR servers preserve resource version history by default. Every update writes a new row to the history table without touching the current-state row that the read APIs return. The two tables grow independently, and if the plan only tracks current state, the actual storage bill diverges quietly for months before it lands on someone's dashboard.

Naming the split is the discipline that keeps the surprise off the invoice. For related walkthroughs, the broader FHIR coverage on the site collects the surrounding material.

What the Two Tables Actually Hold

The current-state table holds one row per resource. A million patients is a million rows. Reads to /Patient/123 return that single row.

The history table holds one row per version. A Patient updated five times contributes five rows to history and still one row to current state. Reads to /Patient/123/_history return the ordered sequence.

Both tables carry the full serialized resource. History does not store deltas; it stores full versions. A pass through the site's FHIR storage bill projector can bracket the total against a patient count when both tables are entered explicitly.

The Multiplier That Grows Over Time

At year zero the history table equals the current-state table because there is one version per resource. Every subsequent update grows history without growing current state. The multiplier climbs as the deployment ages.

At year one, most deployments carry a history table one to one and a half times current state. At year three, two to three times. At year five, three to five times if update rhythms are high.

The multiplier is not linear across resource types. Patients update rarely; Observations rarely change after creation; MedicationRequests update on every dispense. Deployments dominated by high-update resources see the multiplier climb faster. For the resource-level footprint, the FHIR storage costs you forgot to budget covers the other hidden lines.

History Reads Are Rare

Here is the operational asymmetry: history is written all the time and read almost never. Audit queries, compliance reviews, and clinical explainer flows are the main reasons anyone reads history. Everyday workflows do not touch it.

The asymmetry is the invitation for tiered storage. Current state on hot storage where every read is fast; history on warm or cold storage where reads are slower but writes remain cheap. For the specific tiering pattern, cold vs hot FHIR data: tiering strategies that hold up covers the shape.

Compaction and Retention Interact

Some FHIR servers offer history compaction: fold older versions into weekly or monthly snapshots. Compaction shrinks the history footprint but loses the fine-grained version trail.

Retention policies interact with compaction. A deployment that never expires history and never compacts it grows without bound. A deployment that expires history at ninety days keeps current state indefinitely and rolls history off on a fixed cadence.

For the retention framing, how retention policies shape long-term FHIR storage cost is the accompanying reference.

The Audit-Compliance Interaction

Some regulatory frameworks require full version history for a defined window. Others accept compaction after a shorter window. Naming the framework that applies is the first move before deciding on any retention policy.

Deployments that inherit the strictest interpretation of every framework grow storage the fastest. Deployments that choose the applicable interpretation explicitly grow it at the rate the audit actually requires.

Reporting Both Curves

The dashboard that shifts the conversation shows current-state size and history size as two separate lines. The gap between them tells the story. Reports that only track total storage hide the gap and defer the conversation until the invoice arrives.

Every FHIR deployment carries a history story eventually. Owning the number is the shortest path to controlling it.

Suprematism-minimal diagram of two rising line curves on a stark white background, a shorter current-state line traced in muted grey and a taller history line traced in royal blue climbing above it, with a floating red rectangle marking the gap

Sources