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 sufhir.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 esempioPractitioner
, 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 conBundle.type
dihistory
. Il metodo di importazione non applica la semantica dell'elaborazione dei bundle per i bundle batch o transazioni. A differenza difhir.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 inBundle.entry.resource
, ignorandoBundle.entry.request
. Ad esempio, ciò consente l'importazione di bundle di set di ricerca prodotti da un'operazionePatient-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
, utilizzafhir.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 utilizzandofhirStores.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, utilizzafhirStores.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 afhirStores.import
. Se l'applicazione che gestisce l'operazione
fhirStores.import
non ha una buona strategia per quanto segue, usafhir.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 operazioniGET
e 1 operazioneDELETE
, 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.