Opzioni di importazione FHIR

Questa pagina descrive le opzioni per archiviare 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 ha il rendimento migliore quando carica i dati in un archivio FHIR vuoto senza interferenze da altre applicazioni.

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

Prendi in considerazione le seguenti proprietà del metodo fhirStores.import quando decidi se utilizzarlo. Se fhirStores.import non è adatto per la tua applicazione, ti consigliamo di utilizzare il metodo fhir.executeBundle per caricare i dati. Per informazioni su come chiamare fhir.executeBundle, consulta Gestione delle risorse FHIR mediante i bundle FHIR.

  • Il metodo fhirStores.import accetta pacchetti più grandi del 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 rimuove le complessità dell'esecuzione di grandi pacchetti FHIR, ad esempio:

    • Suddivisione dei bundle FHIR in bundle più piccoli
    • Gestione di più pianificazioni dei pacchetti
    • Gestione degli errori temporanei per i quali è possibile riprovare a livello di risorsa o bundle

    Spesso, questi vantaggi superano quelli dell'utilizzo dei set.

  • Ogni risorsa nell'input deve contenere un ID fornito dal cliente. Ogni risorsa viene memorizzata utilizzando l'ID fornito, indipendentemente dall'impostazione enableUpdateCreate nel datastore FHIR.

  • La procedura di importazione non applica l'integrità referenziale, indipendentemente dall'impostazione disableReferentialIntegrity nel datastore FHIR. Se non applichi l'integrità referenziale, puoi 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 dell'archivio FHIR potrebbe violare l'integrità referenziale.

  • Se nello Store esiste già una risorsa con un determinato ID, la versione più recente della risorsa viene sovrascritta senza creare una nuova versione storica. La sovrascrittura avviene indipendentemente dall'impostazione disableResourceVersioning nell'archivio 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, al termine dell'importazione, il negozio conterrà 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 nello store.

  • I contatori dei risultati dell'operazione non conteggiano gli ID duplicati come errori. Ogni risorsa nell'input viene conteggiata come un successo. Ciò potrebbe comportare un conteggio dei successi maggiore del numero di risorse nell'archivio FHIR. Questo accade spesso quando importi i dati organizzati in bundle prodotti da Patient-everything, in cui ogni bundle contiene la propria copia di una risorsa, come Practitioner, a cui potrebbero fare riferimento molte risorse Patient.

  • 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 l'importazione di 5 su 100 risorse non va a buon fine, le 95 risorse rimanenti vengono importate nell'archivio FHIR.

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

Utilizzare i bundle FHIR

Consulta la sezione Bundle FHIR per una panoramica dei bundle FHIR.

Quando utilizzare i bundle FHIR

Quando decidi se utilizzare il metodo fhir.executeBundle per archiviare le risorse FHIR, tieni presenti le seguenti caratteristiche e vantaggi:

  • Se è troppo costoso, in termini di costi di fatturazione o larghezza di banda della rete, per creare una pipeline che memorizzi i dati in Cloud Storage e poi li importi utilizzando fhirStores.import, utilizza fhir.executeBundle.
  • Quando esegui i bundle, puoi applicare l'integrità delle transazioni.
  • Quando esegui i bundle, la convalida del profilo FHIR può essere applicata.
  • 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 l'ora in cui una determinata risorsa FHIR deve essere elaborata è in secondi o minuti, utilizza fhir.executeBundle. Se l'ora in cui deve essere elaborata una determinata risorsa FHIR è in ore o giorni, utilizza fhirStores.import.
  • Se il tuo progetto Google Cloud ha molte operazioni a lungo termine (LRO) esistenti che svolgono altre attività, potresti ottenere un rendimento migliore con fhir.executeBundle rispetto a fhirStores.import.
  • Se l'applicazione che gestisce l'operazione fhirStores.import non ha una buona strategia per quanto segue, utilizza fhir.executeBundle:

    • Gestione degli errori collettivi
    • Risolvere gli errori in un sottoinsieme di risorse FHIR o in interi batch

Quando non utilizzare i bundle FHIR

Tieni presenti le seguenti limitazioni di fhir.executeBundle quando decidi se utilizzarlo per archiviare le risorse FHIR:

  • Ai bundle viene applicata la quota e la fatturazione equivalente alle operazioni al loro interno come se le operazioni fossero eseguite al di fuori del bundle. Ad esempio, se un bundle contiene 10 operazioni POST, 5 operazioni GET e 1 operazione DELETE, la quota e la fatturazione applicate al bundle sono le stesse che se queste operazioni fossero state eseguite in modo indipendente.

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

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

  • Puoi ottenere e mantenere una velocità in uscita elevata utilizzando i pacchetti batch, che ti aiutano a evitare la contesa dei dati. Tuttavia, i pacchetti batch non hanno funzionalità di consistenza delle transazioni, come l'integrità referenziale.

  • Se un bundle è di grandi dimensioni, anche se si tratta di un bundle batch, potresti notare una riduzione del throughput dei dati. Per ulteriori informazioni, consulta la sezione Evitare pacchetti di transazioni di grandi dimensioni.