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