Editorial illustration in suprematism-minimal style depicting a Suprematism bar chart of FHIR per-resource footprints with a dominant vermilion attachment column

Per-Resource Storage Footprint: What Actually Takes Space

FHIR resources are not equal on disk. A Patient in JSON is a couple of kilobytes; an Observation with a full CodeableConcept and a few extensions can be five; a Bundle carrying a hundred entries can be a megabyte. Sizing storage without naming these per-resource footprints leaves the estimate off by a factor of ten in either direction.

The trick is to work with real per-resource numbers, not averages across all resources. For related notes, more US healthcare interoperability notes collects the surrounding material.

Patient Is the Smallest of the Common Resources

A minimal Patient resource with identifier, name, gender, and birthDate serializes to about eight hundred bytes. Add a few extensions, a race code, an ethnicity code, and an address block, and the number climbs to two kilobytes.

Patients dominate the resource count in most deployments but a small fraction of the storage. A deployment with a million patients holds two gigabytes of Patient data. That is the easy line.

Observation Is Where the Volume Lives

An Observation with a coded value, a quantity, and a reference back to the Encounter serializes to about three kilobytes. Add value CodeableConcept expansions, reference ranges, and interpretation codes, and it climbs past five.

Observations dominate the volume in almost every FHIR deployment. A patient with two years of clinical history can carry a thousand Observations easily, and the arithmetic scales linearly. A pass through the site's FHIR storage bill projector turns these per-resource numbers into a total against a patient count.

Encounter Is a Medium Contributor

Encounters typically weigh three to four kilobytes. They reference the Patient, the location, the practitioners, and the diagnoses. The reference blocks are the source of most of the size; the base fields are small.

A hospital deployment with a million encounters holds around three gigabytes of Encounter data. Larger than Patient, smaller than Observation, and often forgotten in the initial estimate.

Bundles Are Where the Numbers Get Alarming

A transaction Bundle of a hundred entries can carry a payload of a megabyte or more. Bundles are transient; most deployments do not store them long-term. Deployments that do retain Bundle history for audit purposes carry a storage line that is orders of magnitude larger than the underlying resources.

Name the Bundle retention policy explicitly. Long Bundle retention combined with heavy transactional traffic can dominate the archive.

Attachments Are the Real Ambush

An Observation.valueAttachment carrying an inline PDF can weigh two megabytes or more. A DocumentReference wrapping a clinical document can weigh five. These are not typos.

A workflow that leans on inline attachments will grow storage in a way that raw resource counts never predict. For the specific pattern, attachment storage in FHIR: when Observation.valueAttachment ambushes you covers the ambush.

Reference Resources Are Cheap

CodeSystems, ValueSets, StructureDefinitions, and other reference resources are typically read-only, small, and highly shared. Storage-wise they are close to free at deployment scale.

The catch is that individual reference resources can be very large. A full SNOMED CT CodeSystem is many gigabytes on its own. Sizing plans should treat the reference resource tier as its own line rather than folding it into the per-patient math.

The Compression Discount

Every one of these numbers shrinks under compression. FHIR JSON compresses well because it repeats field names, structure names, and canonical URLs. Compression ratios of five to one are common; occasionally higher. For the specific limits, compression, deduplication, and their limits on FHIR JSON walks through the numbers.

The rule of thumb that works: measure the per-resource footprint on your own data, apply the compression discount your platform provides, and use those numbers in the plan. Averages from vendor pages are useful as a sanity check and misleading as a source of truth. For the hidden costs beyond the per-resource math, the FHIR storage costs you forgot to budget covers the missing line items.

Suprematism-minimal diagram of a bar chart of per-resource storage footprints as vertical rectangles of varying heights on a stark white background, with a single tall royal-blue rectangle labelled attachment towering over the others

Sources