Migrating large XA studies

Hi everyone,

I need to migrate specific Hemodynamics (XA) studies from a source Orthanc instance (HMSJ) to a destination Orthanc instance (HEMO).

Context & Scope:

  • Volume: ~450 studies
  • Study size: Very large (~3 GB per study, average total ~1.35 TB)
  • Migration direction: Destination (HEMO) pulling studies from Source (HMSJ) using a Python script.

Environment Details:

  • Source Server (HMSJ):
    • OS: Windows Server 2016
    • Database: PostgreSQL
  • Destination Server (HEMO):
    • OS: Ubuntu 24.04
    • Database: SQLite

Current Approach & Questions:
I am currently working on a Python script using the Orthanc REST API to handle the transfer. Given the large study sizes, I would appreciate advice on the best practices to avoid timeouts and high memory usage:

  1. Transfer Mechanism: Is it better to use the /peers/.../store (Orthanc Peer mechanism) via REST API, C-MOVE via DICOM, or stream the DICOM files directly study-by-study/series-by-series?
  2. Performance & Stability: Are there specific REST API parameters or chunking strategies recommended when pulling/pushing multi-gigabyte XA studies?
  3. Database considerations: Since the destination uses SQLite, should I expect I/O bottlenecks during concurrent or rapid ingestion of 3 GB studies?

Any code snippets, architectural recommendations, or best practices for handling high-volume DICOM transfers between Orthanc servers would be greatly appreciated.

Thanks in advance!

Hi @byweber

I would simply use the OrthancCloner with 20 workers threads.

For the performance bottleneck: check this benchmark (tl;dr; if you have more than 50k instances, don’t use SQLite and stick to PostgreSQL)

Hope this helps,

Alain.