Cette page décrit les options de stockage de grands lots de données FHIR dans l'API Cloud Healthcare.
Importer des ressources FHIR
Utilisez la méthode fhirStores.import
pour charger des ressources FHIR à partir de Cloud Storage dans l'API Cloud Healthcare.
La méthode est plus efficace lorsque vous chargez des données dans un magasin FHIR vide sans interférence d'autres applications.
Pour appeler fhirStores.import
, consultez la section Importer et exporter des ressources FHIR à l'aide de Cloud Storage.
Tenez compte des propriétés suivantes de la méthode fhirStores.import
lorsque vous décidez de l'utiliser. Si fhirStores.import
n'est pas adapté à votre application, envisagez d'utiliser la méthode fhir.executeBundle
pour charger des données. Pour savoir comment appeler fhir.executeBundle
, consultez la section Gérer des ressources FHIR à l'aide d'offres FHIR.
- La méthode
fhirStores.import
accepte les bundles de taille supérieure à la limite de 50 Mo surfhir.executeBundle
. Toutefois, la taille de chaque ressource individuelle du groupe est limitée à 10 Mo. L'utilisation de
fhirStores.import
élimine la complexité de l'exécution de grands bundles FHIR, par exemple:- Diviser des groupes FHIR en groupes plus petits
- Gérer plusieurs calendriers de lot
- Gérer les erreurs temporaires pouvant être réessayées au niveau de la ressource ou du lot
Souvent, ces avantages l'emportent sur ceux des bundles.
Chaque ressource de l'entrée doit contenir un ID fourni par le client. Chaque ressource est stockée à l'aide de l'ID fourni, quel que soit le paramètre
enableUpdateCreate
défini sur le magasin FHIR.Le processus d'importation n'applique pas l'intégrité référentielle, quel que soit le paramètre
disableReferentialIntegrity
défini sur le magasin FHIR. L'application forcée de l'intégrité référentielle vous permet d'importer des ressources avec des interdépendances arbitraires sans tenir compte du regroupement ou de l'ordre. Si les données d'entrée contiennent des références non valides ou si l'importation de certaines ressources échoue, l'état du magasin FHIR peut enfreindre l'intégrité référentielle.Si une ressource possède déjà un ID dans le magasin, la version la plus récente de la ressource est écrasée sans créer de version historique. L'écrasement se produit quel que soit le paramètre
disableResourceVersioning
défini sur le magasin FHIR. Si des échecs temporaires se produisent lors de l'importation, une ressource importée avec succès peut être écrasée plusieurs fois.L'opération d'importation est idempotente, sauf si les données d'entrée contiennent plusieurs ressources valides avec le même ID, mais avec un contenu différent. Dans ce cas, une fois l'importation terminée, le magasin contient exactement une ressource avec chaque ID, mais les entrées en double peuvent contenir n'importe quelle version du contenu. Par exemple, l'importation d'un million de ressources possédant le même ID n'écrit qu'une ressource dans le magasin.
Les compteurs de résultats de l'opération ne comptabilisent pas les ID en double par erreur. Chaque ressource de l'entrée compte pour un succès. Cela peut entraîner un décompte de réussite supérieur au nombre de ressources du magasin FHIR. Cela se produit souvent lors de l'importation de données organisées en groupes produits par
Patient-everything
où chaque lot contient sa propre copie d'une ressource, telle quePractitioner
, qui peut être référencée par de nombreuses ressources Patient.Si l'importation de certaines ressources échoue, par exemple en raison d'erreurs d'analyse, les ressources importées avec succès ne font pas l'objet d'un rollback. Par exemple, si l'importation de 5 ressources sur 100 échoue, les 95 ressources restantes sont importées dans le datastore FHIR.
Lorsque vous utilisez le format
BUNDLE
, la méthode d'importation rejette les groupes avecBundle.type
du typehistory
. La méthode d'importation n'applique pas la sémantique de traitement du lot pour les groupes de lots ou de transactions. Contrairement àfhir.executeBundle
, les groupes de transactions ne sont pas exécutés en tant que transaction unique et les références internes ne sont pas réécrites. Le groupe est traité comme une collection de ressources à écrire comme indiqué dansBundle.entry.resource
, en ignorantBundle.entry.request
. Par exemple, cela permet d'importer des groupes d'ensembles de recherche générés par une recherche FHIR ou une opérationPatient-everything
.
Utiliser des groupes FHIR
Pour en savoir plus sur les groupes FHIR, consultez Groupes FHIR.
Quand utiliser des bundles FHIR
Tenez compte des caractéristiques et des avantages suivants de la méthode fhir.executeBundle
lorsque vous décidez de l'utiliser pour stocker des ressources FHIR:
- S'il est trop coûteux, en termes de coûts de facturation ou de bande passante réseau, de créer un pipeline qui stocke des données dans Cloud Storage, puis les importe à l'aide de
fhirStores.import
, utilisezfhir.executeBundle
. - Lors de l'exécution de groupes, l'intégrité des transactions peut être appliquée.
- Lors de l'exécution de groupes, la validation du profil FHIR peut être appliquée.
- Si vous devez envoyer des notifications Pub/Sub lors de la création, de la mise à jour ou de la suppression d'opérations FHIR, utilisez
fhir.executeBundle
. Les notifications Pub/Sub ne sont pas envoyées lorsque les ressources FHIR sont importées à l'aide defhirStores.import
. - Si l'heure à laquelle une ressource FHIR particulière doit être traitée est exprimée en secondes ou en minutes, utilisez
fhir.executeBundle
. Si l'heure à laquelle une ressource FHIR spécifique doit être traitée est exprimée en heures ou en jours, utilisezfhirStores.import
. - Si votre projet Google Cloud comporte de nombreuses opérations de longue durée (LRO) existantes qui effectuent d'autres tâches, vous pouvez constater de meilleures performances avec
fhir.executeBundle
qu'avecfhirStores.import
. Si l'application qui gère l'opération
fhirStores.import
ne dispose pas d'une bonne stratégie pour les éléments suivants, utilisezfhir.executeBundle
:- Gérer les erreurs groupées
- Résoudre les échecs sur un sous-ensemble de ressources FHIR ou des lots entiers
Cas pour lesquels les groupes FHIR ne sont pas recommandés
Tenez compte des limites suivantes de fhir.executeBundle
lorsque vous décidez de l'utiliser pour stocker des ressources FHIR:
Le quota et la facturation équivalents sont appliqués aux opérations du groupe comme si elles étaient exécutées en dehors du groupe. Par exemple, si un lot contient 10 opérations
POST
, 5 opérationsGET
et 1 opérationDELETE
, le quota et la facturation appliqués au lot sont les mêmes que si ces opérations étaient exécutées indépendamment.Par conséquent, viser à réduire les limites de quota et les coûts d'exploitation FHIR ne sont pas des raisons d'utiliser des bundles plutôt que
fhirStores.import
.Les grands lots de transactions sont plus susceptibles de présenter des conflits de transactions, ce qui entraîne des conflits de données et des échecs d'opérations. Pour en savoir plus sur la façon dont ces problèmes peuvent se produire et sur la façon de les résoudre, consultez la section Empêcher les erreurs
429 Resource Exhausted operation_too_costly
.Vous pouvez obtenir et maintenir un débit de données élevé à l'aide de bundles de lots, ce qui vous permet d'éviter les conflits de données. Toutefois, les lots ne disposent pas de fonctionnalités de cohérence transactionnelle, telles que l'intégrité référentielle.
Si un lot est volumineux, même s'il s'agit d'un lot de traitement par lot, le débit des données peut être réduit. Pour en savoir plus, consultez Éviter les lots de transactions volumineux.