FHIR 가져오기 옵션

이 페이지에서는 Cloud Healthcare API에서 FHIR 데이터의 대규모 배치를 저장하기 위한 옵션에 대해 설명합니다.

FHIR 리소스 가져오기

fhirStores.import 메서드를 사용해서 Cloud Storage에서 Cloud Healthcare API로 FHIR 리소스를 로드합니다. 이 메서드는 다른 애플리케이션의 간섭 없이 빈 FHIR 저장소로 데이터를 로드할 때 가장 성능이 좋습니다.

fhirStores.import를 호출하려면 Cloud Storage를 사용하여 FHIR 리소스 가져오기 및 내보내기를 참조하세요.

사용 여부를 결정할 때는 fhirStores.import 메서드의 다음 속성을 고려하세요. 애플리케이션에 fhirStores.import가 적합하지 않은 경우 fhir.executeBundle 메서드를 사용하여 데이터를 로드해 보세요. fhir.executeBundle 호출 방법은 FHIR 번들을 사용하여 FHIR 리소스 관리를 참조하세요.

  • fhirStores.import 메서드는 fhir.executeBundle50MB 제한보다 큰 번들을 허용합니다. 하지만 번들 내 각 개별 리소스의 크기는 10MB로 제한됩니다.
  • fhirStores.import를 사용하면 다음과 같이 대규모 FHIR 번들을 실행하는 복잡성이 없습니다.

    • FHIR 번들을 작은 번들로 분할
    • 여러 번들 일정 관리
    • 리소스 또는 번들 수준에서 재시도할 수 있는 일시적인 오류 관리

    이러한 이점이 번들 사용 이점보다 큰 경우가 많습니다.

  • 입력의 각 리소스에는 클라이언트 제공 ID가 포함되어야 합니다. 각 리소스는 FHIR 저장소의 enableUpdateCreate 설정과 관계없이 제공된 ID를 사용하여 저장됩니다.

  • 가져오기 프로세스는 FHIR 저장소의 disableReferentialIntegrity 설정에 관계없이 참조 무결성을 적용하지 않습니다. 참조 무결성을 적용하지 않으면 그룹화 또는 정렬을 고려하지 않고 임의의 상호 의존성으로 리소스를 가져올 수 있습니다. 입력 데이터에 잘못된 참조가 있거나 일부 리소스를 가져오지 못한 경우 FHIR 저장소의 상태가 참조 무결성을 위반할 수 있습니다.

  • 지정된 ID를 가진 리소스가 이미 저장소에 있는 경우 새 버전의 리소스를 만들지 않고 리소스의 최신 버전을 덮어씁니다. FHIR 저장소의 disableResourceVersioning 설정에 관계없이 덮어쓰기가 수행됩니다. 가져오기 중에 일시적인 오류가 발생하면 성공적으로 가져온 리소스를 두 번 이상 덮어쓸 수 있습니다.

  • 가져오기 작업은 입력 데이터에 ID가 같지만 콘텐츠가 다른 여러 유효한 리소스가 포함되지 않는 한 멱등성을 갖습니다. 이 경우 가져오기가 완료된 후에는 저장소에 각 ID와 정확히 하나의 리소스가 포함되지만 중복 항목에는 모든 버전의 콘텐츠가 포함될 수 있습니다. 예를 들어 ID가 동일한 백만 개의 리소스를 가져오면 하나의 리소스만 저장소에 작성됩니다.

  • 작업 결과 카운터는 중복 ID를 오류로 간주하지 않습니다. 입력에 있는 각 리소스는 성공 1회로 계산됩니다. 이로 인해 성공 횟수가 FHIR 저장소의 리소스 수보다 클 수 있습니다. 이는 주로 Patient-everything에 의해 생성된 번들에 구성된 데이터를 가져올 때 발생합니다. 여기서 각 번들에는 Practitioner와 같이 다수의 환자 리소스가 참조할 수 있는 자체 리소스 사본이 포함되어 있습니다.

  • 파싱 오류로 인해 일부 리소스를 가져오지 못하면 성공적으로 가져온 리소스가 롤백되지 않습니다. 예를 들어 리소스 100개 중 5개를 가져오지 못하면 나머지 95개 리소스를 FHIR 저장소로 가져옵니다.

  • BUNDLE 형식을 사용할 때 가져오기 메서드는 Bundle.typehistory인 번들을 거부합니다. 가져오기 메서드는 배치 또는 트랜잭션 번들에 번들 처리 시맨틱스를 적용하지 않습니다. fhir.executeBundle과 달리 트랜잭션 번들은 단일 트랜잭션으로 실행되지 않으며 번들 내부 참조는 다시 작성되지 않습니다. 번들은 Bundle.entry.request를 무시하고 Bundle.entry.resource에 제공된 대로 작성되는 리소스 모음으로 취급됩니다. 예를 들어 FHIR 검색 또는 Patient-everything 작업으로 생성된 searchset 번들을 가져올 수 있습니다.

FHIR 번들 사용

FHIR 번들 개요는 FHIR 번들을 참조하세요.

FHIR 번들을 사용해야 하는 경우

FHIR 리소스 저장을 위해 사용 여부를 결정할 때는 fhir.executeBundle 메서드 사용에 대한 다음 특성과 이점을 고려하세요.

  • 청구 비용 또는 네트워크 대역폭 측면에서 Cloud Storage에 데이터를 저장하는 파이프라인을 빌드하는 비용이 너무 높으면 fhirStores.import를 사용해서 데이터를 가져오고 fhir.executeBundle을 사용합니다.
  • 번들을 실행할 때 트랜잭션 무결성을 적용할 수 있습니다.
  • 번들을 실행할 때 FHIR 프로필 검증을 적용할 수 있습니다.
  • FHIR에서 만들기, 업데이트, 삭제 작업이 수행될 때 Pub/Sub 알림을 전송해야 하는 경우 fhir.executeBundle을 사용합니다. fhirStores.import를 사용해서 FHIR 리소스를 가져올 때는 Pub/Sub 알림이 전송되지 않습니다.
  • 특정 FHIR 리소스를 처리해야 하는 시간이 초 또는 분 단위이면 fhir.executeBundle를 사용합니다. 특정 FHIR 리소스를 처리해야 하는 시간이 시간 또는 일 단위이면 fhirStores.import를 사용합니다.
  • Google Cloud 프로젝트에 다른 태스크를 수행하는 기존의 장기 실행 작업(LRO)이 많으면 fhirStores.import보다 fhir.executeBundle에서 성능이 더 높을 수 있습니다.
  • fhirStores.import 작업을 관리하는 애플리케이션에 다음에 대한 적합한 전략이 없으면 fhir.executeBundle을 사용합니다.

    • 일괄 오류 처리
    • FHIR 리소스의 하위 집합 또는 전체 배치의 오류 해결

FHIR 번들을 사용하지 않아야 하는 경우

FHIR 리소스 저장을 위해 사용 여부를 결정할 때는 fhir.executeBundle의 다음 제한 사항을 고려하세요.

  • 번들에는 번들 외부에서 작업이 실행된 것처럼 번들 내분의 작업에 동일한 할당량 및 청구가 적용됩니다. 예를 들어 번들에 10개의 POST 작업, 5개의 GET 작업, 1개의 DELETE 작업이 포함된 경우, 이러한 작업이 독립적으로 실행된 것처럼 번들에 적용되는 할당량 및 청구가 동일합니다.

    따라서 할당량 제한과 FHIR 작업 비용 낮추기는 fhirStores.import 대신 번들을 사용하는 이유가 되지 않습니다.

  • 대규모 트랜잭션 번들은 데이터 경합 및 작업 실패로 이어지는 트랜잭션 충돌이 발생할 가능성이 높습니다. 이러한 문제가 발생하는 방법과 해결 방법은 429 Resource Exhausted operation_too_costly 오류 방지를 참조하세요.

  • 데이터 경합을 방지하는 데 도움이 되는 배치 번들을 사용해서 높은 데이터 처리량을 달성하고 유지할 수 있습니다. 하지만 배치 번들에는 참조 무결성과 같은 트랜잭션 일관성 기능이 없습니다.

  • 번들이 크면 배치 번들이라도 데이터 처리량이 줄어든 것을 볼 수 있습니다. 자세한 내용은 대규모 트랜잭션 번들 방지를 참조하세요.