Opzioni di importazione FHIR

Questa pagina descrive le opzioni per l'archiviazione di grandi batch di dati FHIR nell'API Cloud Healthcare.

Importa risorse FHIR

Utilizza il metodo fhirStores.import per caricare le risorse FHIR da Cloud Storage nell'API Cloud Healthcare. Il metodo funziona meglio quando si caricano i dati in un datastore FHIR vuoto senza interferenze da parte di altre applicazioni.

Per chiamare fhirStores.import, consulta Importazione ed esportazione di risorse FHIR tramite Cloud Storage.

Considera le seguenti proprietà del metodo fhirStores.import quando decidi se utilizzarlo. Se fhirStores.import non è adatto alla tua applicazione, valuta l'utilizzo del metodo fhir.executeBundle per caricare i dati. Per informazioni su come chiamare fhir.executeBundle, consulta Gestione delle risorse FHIR utilizzando i bundle FHIR.

  • Il metodo fhirStores.import accetta bundle di dimensioni superiori al limite di 50 MB su fhir.executeBundle. Tuttavia, la dimensione di ogni singola risorsa all'interno del bundle è limitata a 10 MB.
  • L'utilizzo di fhirStores.import elimina le complessità dell'esecuzione di bundle FHIR di grandi dimensioni, ad esempio quanto segue:

    • Suddivisione dei bundle FHIR in pacchetti più piccoli
    • Gestire più pianificazioni di bundle
    • Gestione degli errori temporanei che è possibile tentare nuovamente a livello di risorsa o pacchetto

    Spesso questi vantaggi superano quelli dell'uso dei bundle.

  • Ogni risorsa nell'input deve contenere un ID fornito dal client. Ogni risorsa viene archiviata utilizzando l'ID fornito, indipendentemente dall'impostazione enableUpdateCreate sul datastore FHIR.

  • Il processo di importazione non applica l'integrità referenziale, indipendentemente dall'impostazione disableReferentialIntegrity sul datastore FHIR. Il mancato rispetto dell'integrità referenziale ti consente di importare risorse con interdipendenze arbitrarie senza considerare il raggruppamento o l'ordinamento. Se i dati di input contengono riferimenti non validi o se l'importazione di alcune risorse non riesce, lo stato del datastore FHIR potrebbe violare l'integrità referenziale.

  • Se nell'archivio esiste già una risorsa con un determinato ID, la versione più recente della risorsa viene sovrascritta senza creare una nuova versione cronologica. La sovrascrittura avviene indipendentemente dall'impostazione di disableResourceVersioning sul datastore FHIR. Se si verificano errori temporanei durante l'importazione, una risorsa importata correttamente potrebbe essere sovrascritta più di una volta.

  • L'operazione di importazione è idempotente, a meno che i dati di input non contengano più risorse valide con lo stesso ID ma contenuti diversi. In questo caso, una volta completata l'importazione, l'archivio contiene esattamente una risorsa con ogni ID, ma le voci duplicate potrebbero contenere qualsiasi versione dei contenuti. Ad esempio, l'importazione di un milione di risorse con lo stesso ID scrive solo una risorsa nell'archivio.

  • I contatori del risultato delle operazioni non conteggiano gli ID duplicati come errori. Ogni risorsa nell'input viene conteggiata come un'operazione riuscita. Ciò potrebbe comportare un conteggio di successo superiore al numero di risorse nel datastore FHIR. Questo spesso si verifica quando importi dati organizzati in bundle prodotti da Patient-everything, in cui ogni bundle contiene la propria copia di una risorsa, ad esempio Practitioner, a cui molte risorse Paziente potrebbero fare riferimento.

  • Se l'importazione di alcune risorse non riesce, ad esempio a causa di errori di analisi, il rollback delle risorse importate correttamente non viene eseguito. Ad esempio, se 5 delle 100 risorse non vengono importate, le 95 risorse rimanenti vengono importate nell'archivio FHIR.

  • Quando utilizzi il formato BUNDLE, il metodo di importazione rifiuta i bundle con Bundle.type di history. Il metodo di importazione non applica la semantica dell'elaborazione dei bundle per i bundle batch o transazioni. A differenza di fhir.executeBundle, i pacchetti di transazioni non vengono eseguiti come una singola transazione e i riferimenti interni ai gruppi non vengono riscritti. Il bundle viene trattato come una raccolta di risorse da scrivere come fornito in Bundle.entry.resource, ignorando Bundle.entry.request. Ad esempio, ciò consente l'importazione di bundle di set di ricerca prodotti da un'operazione Patient-everything o di ricerca FHIR.

Usa bundle FHIR

Per una panoramica dei pacchetti FHIR, consulta i pacchetti FHIR.

Quando utilizzare i bundle FHIR

Considera le seguenti caratteristiche e vantaggi dell'utilizzo del metodo fhir.executeBundle quando decidi se utilizzarlo per archiviare le risorse FHIR:

  • Se è troppo costoso (in termini di costi di fatturazione o larghezza di banda) per creare una pipeline che archivia i dati in Cloud Storage e poi li importi utilizzando fhirStores.import, utilizza fhir.executeBundle.
  • Durante l'esecuzione dei bundle, è possibile applicare l'integrità della transazione.
  • Durante l'esecuzione dei bundle, è possibile applicare la convalida del profilo FHIR.
  • Se devi inviare notifiche Pub/Sub quando si verificano operazioni di creazione, aggiornamento o eliminazione di FHIR, utilizza fhir.executeBundle. Le notifiche Pub/Sub non vengono inviate quando le risorse FHIR vengono importate utilizzando fhirStores.import.
  • Se il momento in cui una determinata risorsa FHIR deve essere elaborata è espresso in secondi o minuti, utilizza fhir.executeBundle. Se il momento in cui una determinata risorsa FHIR deve essere elaborata è in ore o giorni, utilizza fhirStores.import.
  • Se il tuo progetto Google Cloud ha molte operazioni a lunga esecuzione (LRO) esistenti che eseguono altre attività, potresti notare prestazioni migliori con fhir.executeBundle rispetto a fhirStores.import.
  • Se l'applicazione che gestisce l'operazione fhirStores.import non ha una buona strategia per quanto segue, usa fhir.executeBundle:

    • Gestione degli errori collettivi
    • Affrontare gli errori su un sottoinsieme di risorse FHIR o su interi batch

Quando non utilizzare i bundle FHIR

Considera le seguenti limitazioni di fhir.executeBundle quando determini se utilizzarlo per archiviare le risorse FHIR:

  • I pacchetti hanno la quota e la fatturazione equivalenti applicate alle operazioni all'interno del bundle come se le operazioni fossero eseguite al di fuori del bundle. Ad esempio, se un bundle presenta 10 operazioni POST, 5 operazioni GET e 1 operazione DELETE, la quota e la fatturazione applicate al bundle corrispondono a quelle applicate in modo indipendente.

    Di conseguenza, l'obiettivo di ridurre i limiti di quota e i costi operativi relativi a FHIR non è un motivo per utilizzare i bundle anziché fhirStores.import.

  • I pacchetti di transazioni di grandi dimensioni potrebbero avere maggiori probabilità di avere conflitti di transazioni, che causano contese dei dati e operazioni non riuscite. Per informazioni su come possono verificarsi questi problemi e su come risolverli, consulta l'articolo Evitare gli errori 429 Resource Exhausted operation_too_costly.

  • Puoi raggiungere e mantenere una velocità effettiva dei dati elevata utilizzando bundle batch, che ti aiutano a evitare contese dei dati. Tuttavia, i bundle batch non hanno funzionalità di coerenza transazionale, come l'integrità referenziale

  • Se un bundle è di grandi dimensioni, anche se si tratta di un bundle batch, potresti notare una velocità effettiva dei dati ridotta. Per saperne di più, consulta l'articolo Evitare pacchetti di transazioni di grandi dimensioni.