Skip to content

Plan and size

Count instances (images) per day, not studies. A CT study is often 300–2,000 instances; a radiograph is 1–4. Average instance sizes run from about 0.1 MB (compressed CR/DX, ultrasound) to 0.5 MB (uncompressed CT/MR); breast tomosynthesis and multi-frame objects can be hundreds of MB each. Expect the busiest hour to carry about 12–15% of the day’s traffic.

Tier Typical site Instances per day Data per day
Small Imaging centre or clinic, 1–5 modalities up to 50,000 up to 25 GB
Medium Community hospital 50,000 – 500,000 25 – 250 GB
Large Large hospital or several sites 500,000 – 3,000,000 250 GB – 1.5 TB

Above the large tier, add nodes behind a load balancer and give the database its own capacity planning.

Small Medium Large
vCPU 4 8 16
RAM 8 GB 16 GB 32 GB
Data volume (SSD) 250 GB 0.5 – 1 TB 2 – 4 TB (NVMe)
Network 1 GbE 1–10 GbE 10 GbE
Nodes 1 (2 for redundancy) 2 recommended 2–4
  • CPU matters mainly for transcoding, for example sending JPEG 2000 to an archive; compressing to JPEG 2000 is the most expensive operation. A node that passes instances through as received needs about half the CPUs above.
  • Memory used by the node itself is small (about 150 MB, flat, in a four-hour soak test). The rest serves as file cache.
  • Network: every instance crosses the network once inbound and once for each destination. With three destinations, 1 GbE carries about 25 MB/s of incoming data.
  • Throughput is rarely the router’s limit: on a laptop, two nodes routed 2,000 instances from 40 senders in about 5 seconds. The network and the destinations set the pace.

Size it as the sum of:

  • Resend cache: a day’s data × Resend cache (hours) ÷ 24, capped by the Resend cache limit (defaults: 24 hours, 100 GB). Delivered instances stay here so they can be sent again from the history.
  • Outage buffer: peak hourly data × the hours you want to ride out a destination outage, such as a PACS down overnight. An instance is stored once however many destinations it goes to.
  • Minimum free disk: 10 GB by default. Below it, the node stops accepting new associations until it has caught up.
  • 20% headroom.

Example, a medium site at 150 GB/day: cache 100 GB (capped), plus an 8-hour outage at about 20 GB/h (160 GB), plus 10 GB, plus 20%: about 320 GB. A 500 GB volume is comfortable.

Small Medium Large
Central service 2 vCPU, 4 GB RAM 2–4 vCPU, 8 GB RAM 2 servers, each 4 vCPU, 8 GB RAM
Database PostgreSQL, or SQL Server Express (10 GB limit) or Standard PostgreSQL or SQL Server Standard PostgreSQL with replication, or SQL Server Standard/Enterprise with Always On
Database placement same server is fine same or separate separate, highly available
Database size (30 days of history) 2 – 10 GB 10 – 100 GB 100 – 600 GB

The database holds the configuration and the history, which takes about 2 KB per instance plus 1 KB per destination it goes to:

database size ≈ instances per day × history retention days × (2 KB + 1 KB × destinations per instance) × 1.3

Example: 50,000 instances a day, 30 days, 3 destinations: 50,000 × 30 × 5 KB × 1.3 ≈ 10 GB. That is the limit of SQL Server Express, so use PostgreSQL or SQL Server Standard, or shorten History retention.

HL7 messages, when you route them, are kept too (compressed, 90 days by default): allow roughly 1 KB per message.

The central service itself is light: it serves the console and takes a heartbeat from each node every couple of seconds. Its load grows with history writes.

Both work the same; pick one per installation.

  • PostgreSQL (18 or later) is free, has no size limit, and runs on Windows, Linux and in Docker. It is the natural choice for a new installation, and the only one for Linux and Docker.
  • SQL Server (2019 or later) suits sites that already run it, with Windows authentication and Always On.

One installation can serve several sites: put nodes at each site, all managed from the same console, and route between them. Each node sends only its own site’s traffic; studies cross the WAN only when a route sends them there. A second central server at another site keeps the console and coordination available if one site is cut off.