FHIR 匯入選項

本頁面說明在 Cloud Healthcare API 中儲存大量 FHIR 資料的選項。

匯入 FHIR 資源

使用 fhirStores.import 方法,將 Cloud Storage 中的 FHIR 資源載入至 Cloud Healthcare API。在沒有其他應用程式干擾的情況下,將資料載入空白 FHIR 儲存庫時,此方法的效能最佳。

如要呼叫 fhirStores.import,請參閱「使用 Cloud Storage 匯入及匯出 FHIR 資源」。

決定是否使用 fhirStores.import 方法時,請考量下列屬性。如果 fhirStores.import 不適合您的應用程式,建議您使用 fhir.executeBundle 方法載入資料。如要瞭解如何呼叫 fhir.executeBundle,請參閱「使用 FHIR 套裝組合管理 FHIR 資源」。

  • fhirStores.import 方法可接受 fhir.executeBundle超過 50 MB 限制的套件。不過,套件中每個個別資源的大小上限為 10 MB
  • 使用 fhirStores.import 可消除執行大型 FHIR 束合的複雜性,例如:

    • 將 FHIR 套裝組合分割成較小的套裝組合
    • 管理多個套裝組合時間表
    • 管理可在資源或套件層級重試的暫時性錯誤

    這些優點通常比使用套件更有優勢。

  • 輸入內容中的每個資源都必須包含由用戶端提供的 ID。每項資源都會使用提供的 ID 儲存,不受 FHIR 儲存庫的 enableUpdateCreate 設定影響。

  • 無論 FHIR 儲存庫的 disableReferentialIntegrity 設定為何,匯入程序都不會強制執行參照完整性。不強制執行參照完整性,可讓您匯入具有任意關聯性的資源,而無須考慮分組或排序。如果輸入資料含有無效參照,或部分資源無法匯入,FHIR 儲存庫的狀態可能會違反參照完整性。

  • 如果商店中已存在具有指定 ID 的資源,系統會覆寫資源的最新版本,而不會建立新的歷史版本。無論 FHIR 儲存庫的 disableResourceVersioning 設定為何,都會發生覆寫。如果匯入期間發生暫時性失敗,成功匯入的資源可能會重複覆寫。

  • 除非輸入資料包含多個 ID 相同但內容不同的有效資源,否則匯入作業是冪等的。在這種情況下,匯入作業完成後,商店會包含每個 ID 的資源各一個,但重複的項目可能包含任何版本的內容。舉例來說,匯入 ID 相同的資源百萬筆,只會將一個資源寫入商店。

  • 作業結果計數器不會將重複的 ID 視為錯誤。輸入內容中的每個資源都會計為一次成功。這可能會導致成功次數大於 FHIR 儲存庫中的資源數量。這類問題通常會發生在匯入由 Patient-everything 產生的套件中整理的資料時,因為每個套件都包含資源 (例如 Practitioner) 的副本,而這些副本可能會由許多病患資源參照。

  • 如果部分資源因剖析錯誤而無法匯入,則不會回復已成功匯入的資源。舉例來說,如果 100 個資源中有 5 個無法匯入,則剩下的 95 個資源會匯入 FHIR 儲存庫。

  • 使用 BUNDLE 格式時,匯入方法會拒絕含有 history Bundle.type 的套件。匯入方法不會為批次或交易套件套用套件處理語意。與 fhir.executeBundle 不同,交易套件不會以單一交易執行,且不會重寫套件內部的參照。系統會將套件視為資源集合,並以 Bundle.entry.resource 提供的形式寫入,忽略 Bundle.entry.request。舉例來說,這可讓您匯入 FHIR 搜尋或 Patient-everything 作業產生的搜尋集組合。

使用 FHIR 套裝組合

如需 FHIR 套裝組合的總覽,請參閱「FHIR 套裝組合」。

使用 FHIR 套裝組合的時機

在決定是否使用 fhir.executeBundle 方法儲存 FHIR 資源時,請考量下列特性和優點:

  • 如果建立在 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),您可能會發現 fhir.executeBundlefhirStores.import 有更好的效能。
  • 如果管理 fhirStores.import 作業的應用程式沒有下列良好的策略,請使用 fhir.executeBundle

    • 處理大量錯誤
    • 針對部分 FHIR 資源或整個批次解決失敗問題

不應使用 FHIR 套裝組合的情況

決定是否使用 fhir.executeBundle 儲存 FHIR 資源時,請考量以下限制:

  • 套用至套件的作業會採用與套件外部作業相同的配額和計費方式。舉例來說,如果套件包含 10 項 POST 運算、5 項 GET 運算和 1 項 DELETE 運算,套用至套件的配額和帳單,就會與個別執行這些運算時相同。

    因此,如果您想降低配額限制和 FHIR 作業成本,就無須使用套件,而改用 fhirStores.import

  • 大型交易組合可能較容易發生交易衝突,進而導致資料爭用和作業失敗。如要瞭解這些問題的發生原因和解決方法,請參閱「防止 429 Resource Exhausted operation_too_costly 錯誤」一文。

  • 您可以使用批次套件,達成並維持高資料處理量,這有助於避免資料爭用。不過,批次套件不具備交易一致性功能,例如參照完整性

  • 如果套件很大,即使是批次套件,資料傳輸量也可能會降低。詳情請參閱「避免使用大型交易組合」。