Auf dieser Seite werden Optionen zum Speichern großer Batches von FHIR-Daten in der Cloud Healthcare API beschrieben.
FHIR-Ressourcen importieren
Verwenden Sie die Methode fhirStores.import
, um FHIR-Ressourcen aus Cloud Storage in die Cloud Healthcare API zu laden.
Die Methode funktioniert am besten, wenn Daten in einen leeren FHIR-Speicher ohne Störungen durch andere Anwendungen geladen werden.
Informationen zum Aufrufen von fhirStores.import
finden Sie unter FHIR-Ressourcen mit Cloud Storage importieren und exportieren.
Berücksichtigen Sie bei der Entscheidung, ob Sie sie verwenden möchten, die folgenden Attribute der Methode fhirStores.import
. Wenn fhirStores.import
für Ihre Anwendung nicht geeignet ist, können Sie Daten mit der fhir.executeBundle
-Methode laden. Informationen zum Aufrufen von fhir.executeBundle
finden Sie unter FHIR-Ressourcen mit FHIR-Bundles verwalten.
- Die Methode
fhirStores.import
akzeptiert Bundles, die größer als das Limit von 50 MB fürfhir.executeBundle
sind. Allerdings ist die Größe jeder einzelnen Ressource innerhalb des Bundles auf 10 MB begrenzt. Mit
fhirStores.import
entfällt die Komplexität der Ausführung großer FHIR-Bundles wie die folgenden:- FHIR-Bundles in kleinere Bundles aufteilen
- Mehrere Zeitpläne für Sets verwalten
- Vorübergehende Fehler verwalten, die auf Ressourcen- oder Bundle-Ebene wiederholt werden können
Häufig überwiegen diese Vorteile die Vorteile von Sets.
Jede Ressource in der Eingabe muss eine vom Kunden bereitgestellte ID enthalten. Ressourcen werden unabhängig von der
enableUpdateCreate
-Einstellung des FHIR-Speichers gespeichert.Der Importprozess erzwingt keine referenzielle Integrität, egal, was in der
disableReferentialIntegrity
-Einstellung des FHIR-Speichers angegeben ist. Wird die referenzielle Integrität nicht erzwungen, können Sie Ressourcen mit beliebigen Abhängigkeiten importieren, ohne die Gruppierung oder Sortierung zu berücksichtigen. Falls die Eingabedaten ungültige Referenzen enthalten oder einige Ressourcen nicht importiert werden, kann der Status des FHIR-Speichers die referenzielle Integrität verletzen.Ist eine Ressource mit einer bestimmten ID bereits im Speicher vorhanden, so wird die neueste Version der Ressource überschrieben, ohne dass eine neue Verlaufsversion erstellt wird. Das Überschreiben erfolgt unabhängig von der
disableResourceVersioning
-Einstellung des FHIR-Speichers. Wenn beim Import vorübergehende Fehler auftreten, können erfolgreich importierte Ressourcen mehrmals überschrieben werden.Der Importvorgang ist idempotent, es sei denn, die Eingabedaten enthalten mehrere gültige Ressourcen mit derselben ID, aber unterschiedlichen Inhalten. In diesem Fall enthält der Speicher nach Abschluss des Imports genau eine Ressource mit jeder ID, die doppelten Einträge können jedoch eine beliebige Version des Inhalts enthalten. Beispiel: Wenn Sie eine Million Ressourcen mit derselben ID importieren, wird nur eine Ressource in den Speicher geschrieben.
Die Vorgangsergebniszähler zählen gedoppelte IDs nicht als Fehler. Jede Ressource in der Eingabe zählt als Erfolg. Dies kann zu einer Erfolgsrate führen, die über der Anzahl der Ressourcen im FHIR-Speicher liegt. Dies tritt häufig auf, wenn Daten importiert werden, die in von
Patient-everything
erstellten Bundles organisiert sind und jedes Bundle eine eigene Kopie einer Ressource wiePractitioner
enthält, auf die möglicherweise von vielen Patientenressourcen verwiesen wird.Wenn Ressourcen nicht erfolgreich importiert werden, z. B. aufgrund von Parsing-Fehlern, werden importierte Ressourcen nicht zurückgesetzt. Wenn beispielsweise 5 von 100 Ressourcen fehlschlagen, werden die verbleibenden 95 Ressourcen in den FHIR-Speicher importiert.
Bei Verwendung des Formats
BUNDLE
lehnt die Importmethode Bundles mitBundle.type
vonhistory
ab. Die Importmethode wendet die Semantik für die Bundle-Verarbeitung auf Batch- oder Transaktions-Bundles nicht an. Im Gegensatz zufhir.executeBundle
werden Transaktions-Bundles nicht als einzelne Transaktion ausgeführt. Weiter werden clusterinterne Referenzen nicht neu geschrieben. Das Bundle wird als eine Sammlung von Ressourcen behandelt, die wie inBundle.entry.resource
festgelegt bereitgestellt werden sollen, wobeiBundle.entry.request
ignoriert wird. Dies ermöglicht beispielsweise das Importieren von Searchset-Bundles, die von einem FHIR-Such- oderPatient-everything
-Vorgang erstellt wurden.
FHIR-Bundles verwenden
Eine Übersicht über FHIR-Bundles finden Sie unter FHIR-Bundles.
Wann sollten FHIR-Bundles verwendet werden?
Beachten Sie die folgenden Eigenschaften und Vorteile der Verwendung der Methode fhir.executeBundle
, wenn Sie entscheiden, ob Sie sie zum Speichern von FHIR-Ressourcen verwenden möchten:
- Wenn es zu teuer ist, entweder in Bezug auf die Abrechnungskosten oder die Netzwerkbandbreite, eine Pipeline zu erstellen, die Daten in Cloud Storage speichert und die Daten dann mit
fhirStores.import
importiert, verwenden Siefhir.executeBundle
. - Beim Ausführen von Bundles kann die Transaktionsintegrität erzwungen werden.
- Beim Ausführen von Bundles kann die FHIR-Profilvalidierung erzwungen werden.
- Wenn Sie Pub/Sub-Benachrichtigungen senden müssen, wenn FHIR-Erstellungs-, Aktualisierungs- oder Löschvorgänge ausgeführt werden, verwenden Sie
fhir.executeBundle
. Pub/Sub-Benachrichtigungen werden nicht gesendet, wenn FHIR-Ressourcen mitfhirStores.import
importiert werden. - Wenn die Zeit, zu der eine bestimmte FHIR-Ressource verarbeitet werden muss, in Sekunden oder Minuten liegt, verwenden Sie
fhir.executeBundle
. Wenn eine bestimmte FHIR-Ressource in Stunden oder Tagen verarbeitet werden muss, verwenden SiefhirStores.import
. - Wenn in Ihrem Google Cloud-Projekt viele Vorgänge mit langer Ausführungszeit (Long-Running Operations, LRO) für andere Aufgaben vorhanden sind, wird mit
fhir.executeBundle
im Vergleich zufhirStores.import
möglicherweise eine bessere Leistung erzielt. Wenn die Anwendung, die den
fhirStores.import
-Vorgang verwaltet, keine gute Strategie für Folgendes hat, verwendefhir.executeBundle
:- Bulk-Fehler verarbeiten
- Fehler für eine Teilmenge von FHIR-Ressourcen oder ganze Batches beheben
Wann keine FHIR-Bundles verwendet werden sollten
Beachten Sie die folgenden Einschränkungen von fhir.executeBundle
, wenn Sie ermitteln, ob Sie damit FHIR-Ressourcen speichern möchten:
Bei Bundles gelten das entsprechende Kontingent und die entsprechende Abrechnung für die Vorgänge innerhalb des Bundles, als ob die Vorgänge außerhalb des Bundles ausgeführt würden. Wenn ein Bundle beispielsweise 10
POST
-Vorgänge, 5GET
-Vorgänge und 1DELETE
-Vorgang enthält, gelten das Kontingent und die Abrechnung für das Bundle genauso, als ob diese Vorgänge unabhängig ausgeführt würden.Das Ziel, die Kontingentlimits und die FHIR-Betriebskosten zu senken, sind daher keine Gründe für die Verwendung von Bundles anstelle von
fhirStores.import
.Bei großen Transaktions-Bundles ist die Wahrscheinlichkeit höher, dass es Transaktionskonflikte gibt, was zu Datenkonflikten und fehlgeschlagenen Vorgängen führt. Informationen dazu, wie diese Probleme auftreten können und wie Sie sie beheben können, finden Sie unter
429 Resource Exhausted operation_too_costly
-Fehler verhindern.Mit Batch-Bundles können Sie einen hohen Datendurchsatz erreichen und aufrechterhalten und so Datenkonflikte vermeiden. Batch-Bundles haben jedoch keine Funktionen für transaktionale Konsistenz, wie z. B. referentielle Integrität.
Wenn ein Bundle sehr groß ist, kann der Datendurchsatz geringer sein, selbst wenn es sich um ein Batch-Bundle handelt. Weitere Informationen finden Sie unter Große Transaktionssets vermeiden.