如要將資料從 Firestore Standard 版資料庫遷移至 Firestore Enterprise 版資料庫,建議使用下列任一選項:
匯入及匯出功能。匯入作業產生的資料檔案與 Enterprise 版和 Standard 版都相容。
firestore-to-firestoreDataflow 範本。 Dataflow 服務可讓您建構資料管道,而firestore-to-firestore範本則會在 Cloud Firestore 資料庫之間建立批次管道。
匯入及匯出是較簡單的選項,設定選項較少。
Dataflow 範本的自訂程度更高。您可以擴充範本程式碼,執行部分遷移作業或轉換資料。你也可以控制工作人員人數和大小。
這兩種選項都支援跨專案和區域的遷移作業。
透過匯出及匯入功能遷移資料
如要透過匯出及匯入作業遷移資料,請參閱「匯出及匯入資料」。如要將資料移至其他專案的資料庫,請參閱「在專案之間移動資料」。
使用 Dataflow範本遷移資料
請按照下列操作說明,使用 firestore-to-firestore Dataflow 範本遷移資料。
事前準備
開始遷移資料前,請務必在來源資料庫上啟用時間點復原 (PITR) 功能。Dataflow 工作會使用 PITR,在 PITR 時間戳記讀取資料。如果 PITR 遭停用,且工作執行時間超過一小時,工作就會失敗。
指派下一節所述的必要角色。
必要的角色
如要將資料從一個資料庫遷移至另一個資料庫,請指派下列角色。您或許也能透過自訂角色或其他預先定義的角色,取得必要權限:
- 如要取得建立新資料庫及存取 Cloud Firestore 資料所需的權限,請要求管理員在專案中授予您「Cloud Datastore 擁有者」(
roles/datastore.owner) Identity and Access Management (IAM) 角色。 -
如要授予 Dataflow 工作者服務帳戶 (例如
PROJECT_NUMBER-compute@) 專案的 Cloud Datastore 使用者 (roles/datastore.user) 身分與存取權管理角色,請為 Dataflow 工作者服務帳戶指派該角色,讓工作可以讀取及寫入 Cloud Firestore 資料庫。如要進一步瞭解 Dataflow 安全性,請參閱「Dataflow 安全性和權限」。
如要進一步瞭解如何授予 IAM 角色,請參閱「管理專案、資料夾和機構的存取權」。
1. 建立新的 Firestore Enterprise 版資料庫
如要將資料從 Standard 版資料庫遷移至 Enterprise 版資料庫,請先建立 Enterprise 版目的地資料庫。請參閱「建立資料庫」。
2. 執行 Dataflow firestore-to-firestore 範本
使用 firestore-to-firestore 範本設定及執行 Dataflow 工作。範本支援遷移整個資料庫,或只遷移指定的集合群組。
限制
請注意 firestore-to-firestore
Dataflow 範本的下列限制:
- 來源資料庫必須是 Standard 版資料庫。
- 遷移作業會在特定讀取時間讀取資料。建議您在來源資料庫中啟用時間點復原 (PITR) 功能。如果未啟用 PITR,資料會在 1 小時後過期,這可能不足以完成資料遷移。PITR 會將資料保留時間延長至七天。
- 不會遷移索引。
Dataflow 工作不會遷移資料庫設定,例如存留時間 (TTL) 政策、備份、PITR 和客戶自行管理的加密金鑰 (CMEK)。
您必須在新資料庫中設定這些設定。為提高資料遷移速度,請等到遷移完成後,再設定目的地資料庫的 TTL、備份和 PITR。
下列範例說明如何使用 Google Cloud CLI 執行範本。
遷移所有資料
如要遷移所有資料,請使用下列指令:
gcloud dataflow flex-template run "JOB_NAME" \ --project "PROJECT" \ --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
更改下列內容:
JOB_NAME:作業名稱。PROJECT:Google Cloud專案的 ID。REGION_NAME:您要執行 Dataflow 工作的Google Cloud 位置。使用靠近資料庫的位置。VERSION:您要使用的範本版本。您可以使用下列值:latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates-REGION_NAME/latest/- 版本名稱,例如
2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名上層資料夾中:gs://dataflow-templates-REGION_NAME/
SOURCE_PROJECT_ID:來源專案的 ID,其中包含 Firestore Standard 版資料庫。Google CloudSOURCE_DATABASE_ID:來源 Cloud Firestore 資料庫的 ID。DESTINATION_PROJECT_ID:新Cloud Firestore資料庫的目的地Google Cloud專案 ID。DESTINATION_DATABASE_ID:目的地 Cloud Firestore 資料庫的 ID。READ_TIME:要從來源資料庫讀取資料的時間戳記。設為 RFC 3339 格式的時間戳記,精確度可達分鐘,例如2026-05-15T16:31:00.00Z。最早的有效時間戳記取決於時間點復原 (PITR) 設定。請參閱「取得最早版本時間」。
遷移特定集合群組
如要只遷移特定集合群組,請使用下列指令:
gcloud dataflow jobs run "JOB_NAME" \ --project "PROJECT" \ --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \ --region REGION_NAME \ --parameters "sourceProjectId=SOURCE_PROJECT_ID" \ --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \ --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \ --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \ --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \ --parameters "readTime=READ_TIME"
更改下列內容:
JOB_NAME:作業名稱。PROJECT:Google Cloud專案的 ID。REGION_NAME:您要執行 Dataflow 工作的Google Cloud 位置。使用靠近資料庫的位置。VERSION:您要使用的範本版本。您可以使用下列值:latest,使用範本的最新版本,該版本位於 bucket 中非依日期命名的上層資料夾:gs://dataflow-templates-REGION_NAME/latest/- 版本名稱,例如
2023-09-12-00_RC00,可使用特定版本的範本,該範本會以巢狀結構存放在 bucket 中相應的依日期命名上層資料夾中:gs://dataflow-templates-REGION_NAME/
SOURCE_PROJECT_ID:來源 Google Cloud 專案的 ID,其中包含 Firestore Standard 版資料庫。SOURCE_DATABASE_ID:來源 Cloud Firestore 資料庫的 ID。COLLECTION_GROUP_IDS:以半形逗號分隔的集合群組 ID 清單,用於遷移。系統不會以遞迴方式納入子集合。舉例來說,如果您指定
users集合群組,除非您也指定messages集合群組,否則遷移作業不會包含/users/userid/messages的messages子集合。DESTINATION_PROJECT_ID:新Cloud Firestore資料庫的目的地Google Cloud專案 ID。DESTINATION_DATABASE_ID:目的地 Cloud Firestore 資料庫的 ID。READ_TIME:從來源資料庫讀取資料的時間戳記。設為 RFC 3339 格式的時間戳記,精確度可達分鐘,例如2026-05-15T16:31:00.00Z。最早的有效時間戳記取決於時間點復原 (PITR) 設定。請參閱「取得最早版本時間」。
3. 設定資料庫
firestore-to-firestore 工作只會遷移資料。
索引和其他資料庫設定不會遷移。除了遷移資料,您也可以考慮在新資料庫中設定下列項目:
索引:Firestore Enterprise 版資料庫不一定需要索引才能執行查詢,且預設不會自動建立索引。如要為查詢建立索引,請參閱下列內容:
- Firestore Enterprise 版索引總覽。
- 使用索引提升查詢效能。
- 您可以使用 Firebase CLI 匯出索引並部署至新資料庫。
- 使用查詢洞察找出可透過索引最佳化的查詢。
存留時間:建立存留時間政策。
備份:設定備份。
PITR:啟用 PITR。
設定資料庫後,您可以使用新資料庫繼續測試應用程式。如要完成遷移作業,請更新應用程式以使用新資料庫。
疑難排解
如果資料庫很大,作業一次讀取太多資料,可能會失敗。解決方式:
提高
maxNumWorkers值。
後續步驟
- 瞭解如何使用管道作業查詢資料。
- 瞭解如何在 Firestore Enterprise 版中最佳化查詢
- 瞭解企業版資料庫的擴充方式。