Options d'importation FHIR

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 sur fhir.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 que Practitioner, 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 avec Bundle.type du type history. 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é dans Bundle.entry.resource, en ignorant Bundle.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ération Patient-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, utilisez fhir.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 de fhirStores.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, utilisez fhirStores.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'avec fhirStores.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, utilisez fhir.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érations GET et 1 opération DELETE, 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.