Xuất và nhập dữ liệu

Bạn có thể sử dụng dịch vụ xuất và nhập do Cloud Firestore quản lý để khôi phục sau khi vô tình xoá dữ liệu và để xuất dữ liệu cho việc xử lý ngoại tuyến. Bạn có thể xuất tất cả tài liệu hoặc chỉ một số bộ sưu tập cụ thể. Tương tự, bạn có thể nhập tất cả dữ liệu từ một tệp xuất hoặc chỉ các bộ sưu tập cụ thể. Dữ liệu đã xuất từ một cơ sở dữ liệu Cloud Firestore có thể được nhập vào một cơ sở dữ liệu Cloud Firestore khác. Bạn cũng có thể tải dữ liệu xuất trên Cloud Firestore vào BigQuery.

Trang này mô tả cách xuất và nhập tài liệu trong Cloud Firestore bằng dịch vụ xuất và nhập được quản lý cũng như Cloud Storage. Dịch vụ xuất và nhập được quản lý của Cloud Firestore được cung cấp thông qua công cụ dòng lệnh gcloud và API Cloud Firestore (REST, RPC).

Trước khi bắt đầu

Để có thể sử dụng dịch vụ xuất và nhập được quản lý, bạn phải hoàn tất những việc sau:

  1. Bật tính năng thanh toán cho dự án trên Google Cloud. Chỉ những dự án Google Cloud đã bật tính năng thanh toán mới có thể sử dụng chức năng xuất và nhập.
  2. Tạo bộ chứa Cloud Storage cho dự án của bạn ở một vị trí gần vị trí cơ sở dữ liệu Cloud Firestore của bạn. Bạn không thể sử dụng bộ chứa Yêu cầu thanh toán cho các hoạt động xuất và nhập.
  3. Đảm bảo rằng tài khoản của bạn có các quyền cần thiết đối với Cloud Firestore và Cloud Storage. Nếu bạn là chủ sở hữu dự án, thì tài khoản của bạn sẽ có các quyền cần thiết. Nếu không, các vai trò sau sẽ cấp quyền cần thiết cho các hoạt động xuất và nhập, cũng như quyền truy cập vào Cloud Storage:

Quyền của tác nhân dịch vụ

Các hoạt động xuất và nhập sẽ sử dụng một tác nhân dịch vụ của Cloud Firestore để uỷ quyền cho các hoạt động của Cloud Storage. Tác nhân dịch vụ của Cloud Firestore sử dụng quy ước đặt tên sau:

Nhân viên hỗ trợ dịch vụ của Cloud Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com

Để tìm hiểu thêm về nhân viên hỗ trợ dịch vụ, hãy xem bài viết Nhân viên hỗ trợ dịch vụ.

Tác nhân dịch vụ của Cloud Firestore yêu cầu quyền truy cập vào bộ chứa Cloud Storage dùng trong thao tác xuất hoặc nhập. Nếu bộ chứa Cloud Storage của bạn nằm trong cùng dự án với cơ sở dữ liệu Cloud Firestore, thì tác nhân dịch vụ của Cloud Firestore có thể truy cập vào bộ chứa đó theo mặc định.

Nếu bộ chứa Cloud Storage nằm trong một dự án khác, bạn phải cấp cho tác nhân dịch vụ Cloud Firestore quyền truy cập vào bộ chứa Cloud Storage.

Chỉ định vai trò cho nhân viên hỗ trợ dịch vụ

Bạn có thể sử dụng công cụ dòng lệnh YT để chỉ định một trong các vai trò dưới đây. Ví dụ: để chỉ định vai trò Quản trị viên bộ nhớ cho tác nhân dịch vụ của Cloud Firestore, hãy chạy lệnh sau:

gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com:roles/storage.admin \
    gs://[BUCKET_NAME]

Thay thế PROJECT_NUMBER bằng số dự án, dùng để đặt tên cho tác nhân dịch vụ Cloud Firestore. Để xem tên nhân viên hỗ trợ dịch vụ, hãy xem phần Xem tên nhân viên hỗ trợ dịch vụ.

Ngoài ra, bạn có thể chỉ định vai trò này thông qua Bảng điều khiển GCP.

Xem tên nhân viên hỗ trợ dịch vụ

Bạn có thể xem tài khoản mà các hoạt động nhập và xuất của bạn dùng để cho phép các yêu cầu trên trang Nhập/Xuất trong Bảng điều khiển Google Cloud Platform. Bạn cũng có thể xem liệu cơ sở dữ liệu của mình sử dụng tác nhân dịch vụ Cloud Firestore hay tài khoản dịch vụ App Engine cũ.

  1. Xem tài khoản uỷ quyền bên cạnh nhãn Nhập/Xuất công việc chạy dưới dạng.

Tác nhân dịch vụ cần có vai trò Storage Admin để dùng bộ chứa Cloud Storage cho hoạt động xuất hoặc nhập.

Thiết lập gcloud cho dự án của bạn

Bạn có thể bắt đầu các thao tác nhập và xuất thông qua Bảng điều khiển Google Cloud Platform hoặc công cụ dòng lệnh gcloud. Để sử dụng gcloud, hãy thiết lập công cụ dòng lệnh và kết nối với dự án của bạn theo một trong các cách sau:

Xuất dữ liệu

Thao tác xuất sẽ sao chép các tài liệu trong cơ sở dữ liệu của bạn sang một tập hợp các tệp trong bộ chứa Cloud Storage. Xin lưu ý rằng dữ liệu xuất không phải là ảnh chụp nhanh cơ sở dữ liệu chính xác được lấy tại thời điểm bắt đầu xuất. Dữ liệu xuất có thể bao gồm các thay đổi được thực hiện trong khi hoạt động đang chạy.

Xuất tất cả tài liệu

Google Cloud Console

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

  4. Nhấp vào Xuất.

  5. Nhấp vào tuỳ chọn Export entire Database (Xuất toàn bộ cơ sở dữ liệu).

  6. Bên dưới phần Choose Destination (Chọn đích đến), hãy nhập tên của bộ chứa trong Cloud Storage hoặc dùng nút Browse (Duyệt qua) để chọn một bộ chứa.

  7. Nhấp vào Xuất.

Bảng điều khiển sẽ trở về trang Nhập/Xuất. Nếu thao tác bắt đầu thành công, trang sẽ thêm một mục vào trang nhập và xuất gần đây. Khi không thành công, trang sẽ hiển thị thông báo lỗi.

Google Cloud

Sử dụng lệnh firestore export để xuất tất cả tài liệu trong cơ sở dữ liệu, thay thế [BUCKET_NAME] bằng tên của bộ chứa Cloud Storage. Thêm cờ --async để ngăn công cụ gcloud chờ thao tác hoàn tất.

  gcloud firestore export gs://[BUCKET_NAME] \
  --database=[DATABASE]

Thay thế đoạn mã sau:

  • BUCKET_NAME: sắp xếp các tệp xuất bằng cách thêm tiền tố tệp sau tên bộ chứa, ví dụ: BUCKET_NAME/my-exports-folder/export-name. Nếu bạn không cung cấp tiền tố tệp, dịch vụ xuất được quản lý sẽ tạo một tiền tố dựa trên dấu thời gian hiện tại.

  • DATABASE: tên của cơ sở dữ liệu mà bạn muốn xuất tài liệu. Đối với cơ sở dữ liệu mặc định, hãy dùng --database='(default)'.

Khi bạn bắt đầu một thao tác xuất, việc đóng cửa sổ dòng lệnh sẽ không huỷ thao tác đó, hãy xem phần huỷ thao tác.

Xuất bộ sưu tập cụ thể

Google Cloud Console

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

  4. Nhấp vào Xuất.

  5. Nhấp vào lựa chọn Xuất một hoặc nhiều nhóm bộ sưu tập. Sử dụng trình đơn thả xuống để chọn một hoặc nhiều nhóm bộ sưu tập.

  6. Bên dưới phần Choose Destination (Chọn đích đến), hãy nhập tên của bộ chứa trong Cloud Storage hoặc dùng nút Browse (Duyệt qua) để chọn một bộ chứa.

  7. Nhấp vào Xuất.

Bảng điều khiển sẽ trở về trang Nhập/Xuất. Nếu thao tác bắt đầu thành công, trang sẽ thêm một mục vào trang nhập và xuất gần đây. Khi không thành công, trang sẽ hiển thị thông báo lỗi.

Google Cloud

Để xuất các nhóm bộ sưu tập cụ thể, hãy sử dụng cờ --collection-ids. Thao tác này chỉ xuất các nhóm bộ sưu tập có mã bộ sưu tập nhất định. Nhóm bộ sưu tập bao gồm mọi bộ sưu tập và bộ sưu tập con (ở bất kỳ đường dẫn nào) có mã bộ sưu tập được chỉ định.

gcloud firestore export gs://[BUCKET_NAME] \
--collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2],[SUBCOLLECTION_ID_1] \
--database=[DATABASE]

Ví dụ: bạn có thể thiết kế một tập hợp restaurants trong cơ sở dữ liệu foo để bao gồm nhiều tập hợp con, chẳng hạn như ratings, reviews hoặc outlets. Để xuất bộ sưu tập restaurantsreviews cụ thể, lệnh của bạn sẽ có dạng như sau:

gcloud firestore export gs://[BUCKET_NAME] \
--collection-ids=restaurants,reviews \
--database='cymbal'

Xuất từ dấu thời gian PITR

Bạn có thể xuất cơ sở dữ liệu của mình sang Cloud Storage từ dữ liệu PITR bằng lệnh gcloud firestore export. Bạn có thể xuất dữ liệu PITR, trong đó dấu thời gian là một dấu thời gian toàn bộ phút trong vòng 7 ngày qua, nhưng không sớm hơn earliestVersionTime. Nếu dữ liệu không còn tồn tại tại dấu thời gian được chỉ định, thì thao tác xuất sẽ không thành công.

Thao tác xuất PITR hỗ trợ tất cả các bộ lọc, bao gồm cả việc xuất tất cả tài liệu và xuất các bộ sưu tập cụ thể.

  1. Xuất cơ sở dữ liệu, chỉ định tham số snapshot-time cho dấu thời gian khôi phục mong muốn.

    Google Cloud

    Chạy lệnh sau để xuất cơ sở dữ liệu sang bộ chứa của bạn.

    gcloud firestore export gs://[BUCKET_NAME_PATH] \
        --snapshot-time=[PITR_TIMESTAMP] \
        --collection-ids=[COLLECTION_IDS] \
        --namespace-ids=[NAMESPACE_IDS]
    

    Ở đâu,

    • PITR_TIMESTAMP – dấu thời gian PITR ở độ chi tiết tính bằng phút, ví dụ: 2023-05-26T10:20:00.00Z.

    Vui lòng lưu ý những điểm sau đây trước khi xuất dữ liệu PITR:

    • Hãy chỉ định dấu thời gian ở định dạng RFC 3339. Ví dụ: 2020-09-01T23:59:30.234233Z.
    • Hãy đảm bảo rằng dấu thời gian mà bạn chỉ định là một dấu thời gian nguyên phút trong vòng 7 ngày qua, nhưng không được sớm hơn earliestVersionTime. Nếu dữ liệu không còn tồn tại tại dấu thời gian được chỉ định, thì hệ thống sẽ tạo lỗi.
    • Bạn không bị tính phí cho lần xuất PITR không thành công.

Nhập dữ liệu

Sau khi đã xuất các tệp trong Cloud Storage, bạn có thể nhập tài liệu trong các tệp đó trở lại dự án của mình hoặc vào một dự án khác. Hãy lưu ý các điểm sau đây về thao tác nhập:

  • Khi bạn nhập dữ liệu, các chỉ mục bắt buộc sẽ được cập nhật bằng cách sử dụng định nghĩa chỉ mục hiện tại trong cơ sở dữ liệu của bạn. Dữ liệu xuất không chứa định nghĩa chỉ mục.

  • Thao tác nhập không chỉ định mã tài liệu mới. Các lệnh nhập sử dụng mã nhận dạng được thu thập tại thời điểm xuất. Khi một tài liệu đang được nhập, mã nhận dạng của tài liệu đó sẽ được dành riêng để ngăn chặn xung đột về mã nhận dạng. Nếu đã tồn tại một tài liệu có cùng mã nhận dạng, thì thao tác nhập sẽ ghi đè tài liệu hiện có.

  • Nếu một tài liệu trong cơ sở dữ liệu của bạn không bị ảnh hưởng bởi việc nhập, thì tài liệu đó sẽ vẫn còn trong cơ sở dữ liệu của bạn sau khi được nhập.

  • Thao tác nhập không kích hoạt Cloud Functions. Trình nghe ảnh chụp nhanh nhận thông tin cập nhật liên quan đến hoạt động nhập.

  • Tên tệp .overall_export_metadata phải khớp với tên của thư mục mẹ:

    gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadata

    Nếu bạn di chuyển hoặc sao chép các tệp đầu ra của một tệp xuất, hãy giữ nguyên tên tệp PARENT_FOLDER_NAME.overall_export_metadata.

Nhập tất cả tài liệu từ tệp xuất

Google Cloud Console

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

  4. Nhấp vào Nhập.

  5. Trong trường Filename (Tên tệp), hãy nhập tên của tệp .overall_export_metadata qua một thao tác xuất đã hoàn tất. Bạn có thể dùng nút Browse (Duyệt qua) để chọn tệp.

  6. Nhấp vào Nhập.

Bảng điều khiển sẽ trở về trang Nhập/Xuất. Nếu thao tác bắt đầu thành công, trang sẽ thêm một mục vào trang nhập và xuất gần đây. Khi không thành công, trang sẽ hiển thị thông báo lỗi.

Google Cloud

Sử dụng lệnh firestore import để nhập tài liệu từ một thao tác xuất trước đó.

gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ --database=[DATABASE]

Thay thế đoạn mã sau:

  • BUCKET_NAME/EXPORT_PREFIX: vị trí của các tệp xuất.

  • DATABASE: tên của cơ sở dữ liệu. Đối với cơ sở dữ liệu mặc định, hãy dùng --database='(default)'.

Ví dụ:

gcloud firestore import gs://my-bucket/2017-05-25T23:54:39_76544/ --database='cymbal'

Bạn có thể xác nhận vị trí của các tệp xuất trong trình duyệt Cloud Storage trong Bảng điều khiển Google Cloud Platform:

Mở trình duyệt Cloud Storage

Sau khi bạn bắt đầu một thao tác nhập, việc đóng cửa sổ dòng lệnh sẽ không huỷ thao tác đó, hãy xem phần huỷ thao tác.

Nhập bộ sưu tập cụ thể

Google Cloud Console

Bạn không thể chọn bộ sưu tập cụ thể trong bảng điều khiển. Thay vào đó, hãy sử dụng gcloud.

Google Cloud

Để nhập các nhóm bộ sưu tập cụ thể từ một tập hợp các tệp xuất, hãy sử dụng cờ --collection-ids. Thao tác này chỉ nhập các nhóm bộ sưu tập có mã bộ sưu tập đã cho. Nhóm bộ sưu tập này bao gồm mọi bộ sưu tập và bộ sưu tập con (ở bất kỳ đường dẫn nào) có mã bộ sưu tập được chỉ định. Chỉ định tên cơ sở dữ liệu bằng cờ --database. Đối với cơ sở dữ liệu mặc định, hãy dùng --database='(default)'.

Chỉ có thể xuất các nhóm bộ sưu tập cụ thể mới hỗ trợ việc nhập các nhóm bộ sưu tập cụ thể. Bạn không thể nhập các bộ sưu tập cụ thể từ việc xuất tất cả tài liệu.

  gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/ \
  --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2],[SUBCOLLECTION_ID_1] \
  --database=[DATABASE]

Nhập tệp xuất PITR

Làm theo các bước trong phần Nhập tất cả tài liệu để nhập cơ sở dữ liệu đã xuất. Nếu đã tồn tại bất kỳ tài liệu nào trong cơ sở dữ liệu của bạn, tài liệu đó sẽ bị ghi đè.

Quản lý hoạt động xuất và nhập

Sau khi bạn bắt đầu một thao tác xuất hoặc nhập, Cloud Firestore sẽ gán một tên duy nhất cho thao tác đó. Bạn có thể sử dụng tên thao tác để xoá, huỷ hoặc kiểm tra trạng thái của thao tác đó.

Tên thao tác có tiền tố projects/[PROJECT_ID]/databases/(default)/operations/, ví dụ:

projects/my-project/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg

Tuy nhiên, bạn có thể bỏ tiền tố này khi chỉ định tên thao tác cho các lệnh describe, canceldelete.

Liệt kê tất cả hoạt động xuất và nhập

Google Cloud Console

Bạn có thể xem danh sách các hoạt động xuất và nhập gần đây trên trang Nhập/Xuất của Bảng điều khiển Google Cloud Platform.

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

Google Cloud

Dùng lệnh operations list để xem tất cả thao tác xuất và nhập đã hoàn thành gần đây và đang chạy:

gcloud firestore operations list

Kiểm tra trạng thái hoạt động

Google Cloud Console

Bạn có thể xem trạng thái của một thao tác xuất hoặc nhập gần đây trên trang Nhập/Xuất của Bảng điều khiển Google Cloud Platform.

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

Google Cloud

Dùng lệnh operations describe để hiển thị trạng thái của thao tác xuất hoặc nhập.

gcloud firestore operations describe [OPERATION_NAME]

Ước tính thời gian hoàn thành

Yêu cầu về trạng thái của một hoạt động lâu dài sẽ trả về các chỉ số workEstimatedworkCompleted. Mỗi chỉ số trong số này được trả về ở cả số byte và số lượng thực thể:

  • workEstimated cho biết tổng số byte ước tính và tài liệu mà một thao tác sẽ xử lý. Cloud Firestore có thể bỏ qua chỉ số này nếu không thể ước tính.

  • workCompleted cho biết số byte và số tài liệu được xử lý tính đến thời điểm hiện tại. Sau khi thao tác hoàn tất, giá trị này sẽ cho biết tổng số byte và tài liệu đã thực sự được xử lý. Giá trị này có thể lớn hơn giá trị của workEstimated.

Chia workCompleted cho workEstimated để có số liệu ước tính sơ bộ về tiến độ. Số liệu ước tính này có thể không chính xác vì phụ thuộc vào việc thu thập số liệu thống kê bị trễ.

Huỷ thao tác

Google Cloud Console

Bạn có thể huỷ một thao tác xuất hoặc nhập đang chạy trên trang Nhập/Xuất của Bảng điều khiển Google Cloud Platform.

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.

  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

Trong bảng Các lần nhập và xuất gần đây, các thao tác hiện đang chạy sẽ có nút Cancel (Huỷ) trong cột Complete (Đã hoàn tất). Nhấp vào nút Cancel (Huỷ) để dừng thao tác. Nút này sẽ chuyển thành thông báo Cancelling (Huỷ) rồi thành Cancel (Đã huỷ) khi thao tác dừng hoàn toàn.

Google Cloud

Dùng lệnh operations cancel để dừng một thao tác đang thực hiện:

gcloud firestore operations cancel [OPERATION_NAME]

Việc huỷ một thao tác đang chạy sẽ không huỷ thao tác đó. Nếu bạn huỷ thao tác xuất, thì tài liệu đã được xuất vào Cloud Storage, còn hoạt động nhập bị huỷ sẽ giữ lại nội dung cập nhật cho cơ sở dữ liệu của bạn. Bạn không thể nhập một tệp dữ liệu xuất đã hoàn tất một phần.

Xoá thao tác

Hãy dùng lệnh gcloud firestore operations delete để xoá một thao tác khỏi danh sách các thao tác gần đây. Lệnh này sẽ không xoá các tệp xuất khỏi Cloud Storage.

gcloud firestore operations delete [OPERATION_NAME]

Lập hoá đơn và định giá cho hoạt động xuất và nhập khẩu

Bạn phải bật tính năng thanh toán cho dự án trên Google Cloud trước khi sử dụng dịch vụ xuất và nhập được quản lý.

Hoạt động xuất và nhập sẽ được tính phí cho lượt đọc và ghi tài liệu theo mức giá nêu trong phần Giá của Cloud Firestore. Mỗi tài liệu đã xuất sẽ phải chịu một thao tác xuất dữ liệu. Thao tác nhập phải chịu một thao tác ghi trên mỗi tài liệu đã nhập.

Các tệp đầu ra được lưu trữ trong Cloud Storage sẽ được tính vào Chi phí lưu trữ dữ liệu của bạn trong Cloud Storage.

Các chi phí cho hoạt động xuất và nhập không được tính vào giới hạn chi tiêu của bạn. Các hoạt động xuất hoặc nhập sẽ không kích hoạt thông báo ngân sách Google Cloud cho đến khi hoàn tất. Tương tự, các lượt đọc và ghi được thực hiện trong thao tác xuất hoặc nhập sẽ được áp dụng cho hạn mức hằng ngày sau khi thao tác đó hoàn tất. Các thao tác xuất và nhập sẽ không ảnh hưởng đến mức sử dụng được trình bày trong phần sử dụng trên bảng điều khiển.

Xem chi phí xuất và nhập

Các thao tác xuất và nhập sẽ áp dụng nhãn goog-firestoremanaged:exportimport cho các thao tác đã lập hoá đơn. Trên trang báo cáo Thanh toán trên đám mây, bạn có thể sử dụng nhãn này để xem các chi phí liên quan đến hoạt động nhập và xuất:

Truy cập vào nhãn goog-firestoremanage trên trình đơn bộ lọc.

Xuất sang BigQuery

Bạn có thể tải dữ liệu từ tệp dữ liệu xuất trong Cloud Firestore vào BigQuery, nhưng chỉ khi bạn chỉ định bộ lọc collection-ids. Xem phần Tải dữ liệu từ tệp dữ liệu xuất trên Cloud Firestore.

Giới hạn cột BigQuery

BigQuery yêu cầu giới hạn 10.000 cột cho mỗi bảng. Hoạt động xuất trên Cloud Firestore sẽ tạo một giản đồ bảng BigQuery cho mỗi nhóm bộ sưu tập. Trong giản đồ này, mỗi tên trường duy nhất trong một nhóm bộ sưu tập sẽ trở thành một cột giản đồ.

Nếu giản đồ BigQuery của nhóm thu thập vượt quá 10.000 cột, thì thao tác xuất trên Cloud Firestore sẽ cố gắng nằm trong giới hạn cột bằng cách coi các trường trong bản đồ là byte. Nếu lượt chuyển đổi này khiến số cột dưới 10.000 cột, bạn có thể tải dữ liệu vào BigQuery, nhưng không thể truy vấn các trường phụ trong các trường liên kết. Nếu số lượng cột vẫn vượt quá 10.000 cột, thì thao tác xuất sẽ không tạo ra giản đồ BigQuery cho nhóm thu thập và bạn không thể tải dữ liệu của nhóm đó vào BigQuery.

Xuất các tệp siêu dữ liệu và định dạng

Dữ liệu đầu ra của dữ liệu xuất có quản lý sẽ sử dụng định dạng nhật ký LevelDB.

Tệp siêu dữ liệu

Thao tác xuất sẽ tạo một tệp siêu dữ liệu cho từng nhóm bộ sưu tập mà bạn chỉ định. Tệp siêu dữ liệu thường có tên là ALL_NAMESPACES_KIND_[COLLECTION_GROUP_ID].export_metadata.

Tệp siêu dữ liệu là vùng đệm giao thức và bạn có thể giải mã các tệp đó bằng trình biên dịch giao thức protoc. Ví dụ: bạn có thể giải mã tệp siêu dữ liệu để xác định các nhóm bộ sưu tập mà tệp xuất chứa:

protoc --decode_raw < export0.export_metadata

Di chuyển tác nhân dịch vụ

Cloud Firestore sử dụng một tác nhân dịch vụ Cloud Firestore để uỷ quyền cho các hoạt động nhập và xuất thay vì sử dụng tài khoản dịch vụ App Engine. Tác nhân dịch vụ và tài khoản dịch vụ sử dụng các quy ước đặt tên sau đây:

Nhân viên hỗ trợ dịch vụ của Cloud Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com

Trước đây, Cloud Firestore sử dụng tài khoản dịch vụ mặc định của App Engine thay vì tác nhân dịch vụ của Cloud Firestore. Nếu cơ sở dữ liệu của bạn vẫn sử dụng tài khoản dịch vụ App Engine để nhập hoặc xuất dữ liệu, bạn nên làm theo hướng dẫn trong phần này để di chuyển sang sử dụng tác nhân dịch vụ Cloud Firestore.

Tài khoản dịch vụ App Engine
PROJECT_ID@appspot.gserviceaccount.com

Tác nhân dịch vụ Cloud Firestore được ưu tiên hơn vì dành riêng cho Cloud Firestore. Tài khoản dịch vụ App Engine được nhiều dịch vụ dùng chung.

Xem tài khoản uỷ quyền

Bạn có thể xem tài khoản mà các hoạt động nhập và xuất mà bạn sử dụng để cho phép các yêu cầu trên trang Nhập/Xuất trong Bảng điều khiển Google Cloud Platform. Bạn cũng có thể xem liệu cơ sở dữ liệu của mình đã sử dụng tác nhân dịch vụ Cloud Firestore hay chưa.

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.
  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

  4. Xem tài khoản uỷ quyền bên cạnh nhãn Nhập/Xuất công việc chạy dưới dạng.

Nếu dự án của bạn không sử dụng tác nhân dịch vụ của Cloud Firestore, bạn có thể di chuyển sang tác nhân dịch vụ của Cloud Firestore bằng một trong những kỹ thuật sau:

Kỹ thuật đầu tiên trong số này được ưu tiên hơn vì nó bản địa hoá phạm vi hiệu ứng cho một dự án Cloud Firestore duy nhất. Kỹ thuật thứ hai không được ưu tiên vì kỹ thuật này không di chuyển các quyền hiện có trong bộ chứa Cloud Storage. Tuy nhiên, giải pháp này đảm bảo tuân thủ quy định về bảo mật ở cấp tổ chức.

Di chuyển bằng cách kiểm tra và cập nhật các quyền đối với bộ chứa trong Cloud Storage

Quá trình di chuyển gồm hai bước:

  1. Cập nhật các quyền của bộ chứa trong Cloud Storage. Hãy xem phần sau để biết thông tin chi tiết.
  2. Xác nhận việc di chuyển sang tác nhân dịch vụ của Cloud Firestore.

Quyền của bộ chứa tác nhân dịch vụ

Đối với mọi thao tác xuất hoặc nhập sử dụng bộ chứa Cloud Storage trong dự án khác, bạn phải cấp quyền của tác nhân dịch vụ Cloud Firestore cho bộ chứa đó. Ví dụ: các thao tác di chuyển dữ liệu sang một dự án khác cần phải truy cập vào một bộ chứa trong dự án khác đó. Nếu không, các thao tác này sẽ không thực hiện được sau khi di chuyển sang tác nhân dịch vụ Cloud Firestore.

Quy trình nhập và xuất nằm trong cùng một dự án không đòi hỏi phải thay đổi quyền. Theo mặc định, tác nhân dịch vụ của Cloud Firestore có thể truy cập vào các bộ chứa trong cùng một dự án.

Cập nhật quyền cho các bộ chứa trong Cloud Storage từ các dự án khác để cấp quyền truy cập vào tác nhân dịch vụ service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com. Cấp cho tác nhân dịch vụ vai trò Firestore Service Agent.

Vai trò Firestore Service Agent cấp quyền đọc và ghi cho một bộ chứa trên Cloud Storage. Nếu bạn chỉ cần cấp quyền đọc hoặc chỉ ghi, hãy sử dụng vai trò tuỳ chỉnh.

Quá trình di chuyển được mô tả trong phần sau đây sẽ giúp bạn xác định những bộ chứa của Cloud Storage có thể cần phải cập nhật quyền.

Di chuyển dự án sang Firestore Service Agent

Hãy hoàn tất các bước sau để di chuyển từ tài khoản dịch vụ App Engine sang tác nhân dịch vụ Cloud Firestore. Sau khi hoàn tất, bạn không thể huỷ quá trình di chuyển.

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.
  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

  4. Nếu dự án của bạn chưa di chuyển sang tác nhân dịch vụ Cloud Firestore, bạn sẽ thấy một biểu ngữ mô tả quá trình di chuyển và nút Kiểm tra trạng thái bộ chứa. Bước tiếp theo sẽ giúp bạn xác định và khắc phục các lỗi có thể xảy ra về quyền.

    Nhấp vào Kiểm tra trạng thái bộ chứa.

    Một trình đơn sẽ xuất hiện với tuỳ chọn để hoàn tất quá trình di chuyển của bạn và danh sách các bộ chứa trong Cloud Storage. Có thể mất vài phút để tải xong danh sách.

    Danh sách này bao gồm những bộ chứa được dùng gần đây trong hoạt động nhập và xuất, nhưng hiện không cấp quyền đọc và ghi cho tác nhân dịch vụ của Cloud Firestore.

  5. Hãy ghi lại tên chính của nhân viên hỗ trợ dịch vụ Cloud Firestore trong dự án của bạn. Tên nhân viên hỗ trợ dịch vụ sẽ xuất hiện trong nhãn Nhân viên hỗ trợ dịch vụ cấp quyền truy cập.
  6. Đối với bộ chứa bất kỳ trong danh sách mà bạn sẽ sử dụng cho các hoạt động nhập hoặc xuất sau này, hãy hoàn tất các bước sau:

    1. Trong hàng trong bảng của bộ chứa này, hãy nhấp vào Khắc phục. Thao tác này sẽ mở trang quyền của bộ chứa đó trong một thẻ mới.

    2. Nhấp vào Thêm.
    3. Trong trường New mains (Đối tượng chính mới), hãy nhập tên của nhân viên hỗ trợ dịch vụ trên Cloud Firestore.
    4. Trong trường Select a role (Chọn vai trò), hãy chọn Service Agents > Firestore Service Agent (Nhân viên dịch vụ > Tác nhân dịch vụ của Firestore).
    5. Nhấp vào Lưu.
    6. Quay lại thẻ có trang Nhập/Xuất trong Cloud Firestore.
    7. Lặp lại các bước này cho những bộ chứa khác trong danh sách. Hãy nhớ xem tất cả các trang trong danh sách.
  7. Nhấp vào Di chuyển sang Nhân viên hỗ trợ dịch vụ của Firestore. Nếu vẫn còn nhóm không vượt qua được quy trình kiểm tra quyền, bạn cần xác nhận quá trình di chuyển bằng cách nhấp vào Di chuyển.

    Một thông báo sẽ cho bạn biết khi nào quá trình di chuyển hoàn tất. Bạn không thể huỷ quá trình di chuyển.

Xem trạng thái di chuyển

Cách xác minh trạng thái di chuyển của dự án:

  1. Trong Bảng điều khiển Google Cloud Platform, hãy chuyển đến trang Cơ sở dữ liệu.

    Chuyển đến trang Cơ sở dữ liệu

  2. Chọn cơ sở dữ liệu cần thiết trong danh sách cơ sở dữ liệu.
  3. Trong trình đơn điều hướng, hãy nhấp vào Nhập/Xuất.

  4. Tìm hiệu ứng chính bên cạnh nhãn Công việc nhập/xuất chạy dưới dạng.

    Nếu tên chính là service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com, tức là dự án của bạn đã di chuyển sang tác nhân dịch vụ Cloud Firestore. Bạn sẽ không thể huỷ quá trình di chuyển sau khi thực hiện.

    Nếu dự án chưa được di chuyển, một biểu ngữ sẽ xuất hiện ở đầu trang với nút Kiểm tra trạng thái bộ chứa. Hãy xem phần Di chuyển sang tác nhân dịch vụ Firestore để hoàn tất quá trình di chuyển.

Thêm một quy tắc ràng buộc chính sách trên toàn tổ chức

  • Đặt quy tắc ràng buộc sau đây trong chính sách của tổ chức:

    Cần có Firestore Service Agent để nhập/xuất (firestore.requireP4SAforImportExport).

    Quy tắc ràng buộc này đòi hỏi các thao tác nhập và xuất phải sử dụng tác nhân dịch vụ Cloud Firestore để uỷ quyền cho các yêu cầu. Để đặt quy tắc ràng buộc này, hãy xem phần Tạo và quản lý các chính sách tổ chức .

Việc áp dụng quy tắc ràng buộc trong chính sách dành cho tổ chức này sẽ không tự động cấp các quyền thích hợp đối với bộ chứa trong Cloud Storage cho tác nhân dịch vụ Cloud Firestore.

Nếu quy tắc ràng buộc tạo ra lỗi về quyền cho bất kỳ quy trình nhập hoặc xuất nào, thì bạn có thể tắt quy trình này để quay lại sử dụng tài khoản dịch vụ mặc định. Sau khi kiểm tra và cập nhật các quyền của bộ chứa trong Cloud Storage, bạn có thể bật lại quy tắc ràng buộc đó.