이 페이지에서는 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.executeBundle
의 50MB 제한보다 큰 번들을 허용합니다. 하지만 번들 내 각 개별 리소스의 크기는 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.type
이history
인 번들을 거부합니다. 가져오기 메서드는 배치 또는 트랜잭션 번들에 번들 처리 시맨틱스를 적용하지 않습니다.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
오류 방지를 참조하세요.데이터 경합을 방지하는 데 도움이 되는 배치 번들을 사용해서 높은 데이터 처리량을 달성하고 유지할 수 있습니다. 하지만 배치 번들에는 참조 무결성과 같은 트랜잭션 일관성 기능이 없습니다.
번들이 크면 배치 번들이라도 데이터 처리량이 줄어든 것을 볼 수 있습니다. 자세한 내용은 대규모 트랜잭션 번들 방지를 참조하세요.