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 để 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ể. Bạn có thể nhập dữ liệu được xuất từ một cơ sở dữ liệu Cloud Firestore 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 Cloud Firestore vào BigQuery.

Trang này mô tả cách xuất và nhập tài liệu Cloud Firestore bằng cách sử dụng dịch vụ xuất và nhập được quản lý cũng như Cloud Storage. Dịch vụ nhập và xuất do Cloud Firestore quản lý có sẵn 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 các nhiệm vụ sau:

  1. Bật tính năng thanh toán cho dự á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 Người yêu cầu thanh toán cho các thao tác 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 cho Cloud FirestoreCloud 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 đây sẽ cấp các quyền cần thiết cho các thao tác 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 thao tác xuất và nhập sẽ sử dụng tác nhân dịch vụ Cloud Firestore để uỷ quyền cho các thao tác của Cloud Storage. Tác nhân dịch vụ Cloud Firestore sử dụng quy ước đặt tên sau:

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

Nếu bộ chứa Cloud Storage nằm trong một dự án khác, thì 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 gsutil để chỉ định một trong các vai trò bên dưới. Ví dụ: để chỉ định vai trò Quản trị viên bộ nhớ cho tác nhân dịch vụ 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 của bạn. Số này được 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 bằng Google Cloud Console.

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 sử dụng để uỷ quyền cho các yêu cầu trên trang Nhập/Xuất trong Google Cloud Console. 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 Chạy công việc nhập/xuất dưới dạng.

Tác nhân dịch vụ cần có vai trò Storage Admin để sử dụng bộ chứa Cloud Storage cho thao tác 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 Google Cloud Console 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 vào một tập hợp 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 chính xác của cơ sở dữ liệu được chụp tại thời điểm bắt đầu xuất. Một lần xuất có thể bao gồm các thay đổi được thực hiện trong khi thao tác đang chạy.

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

Bảng điều khiển Google Cloud

  1. Trong bảng điều khiển Google Cloud, 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 Choose Destination (Chọn đích đến), hãy nhập tên của một bộ chứa Cloud Storage hoặc sử 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ẽ quay lại 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. Nếu không thành công, trang sẽ hiển thị thông báo lỗi.

gcloud

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 phải chờ thao tác hoàn tất.

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

Thay thế nội dung 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 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)'.

Sau khi bạn bắt đầu một thao tác xuất, việc đóng thiết bị đầu cuối sẽ không huỷ thao tác đó, hãy xem phần huỷ thao tác.

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

Bảng điều khiển Google Cloud

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

    Chuyển đến 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 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ẽ quay lại 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. Nếu không thành công, trang sẽ hiển thị thông báo lỗi.

gcloud

Để 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 đã cho. Nhóm bộ sưu tập bao gồm tất cả bộ sưu tập và bộ sưu tập con (tại bất kỳ đường dẫn nào) có mã nhận dạng 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 bộ sưu tập restaurants trong cơ sở dữ liệu foo để bao gồm nhiều bộ sưu tậ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 có dấu thời gian là dấu thời gian theo 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 đã 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ả 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 thành dấu thời gian khôi phục mong muốn.

    gcloud

    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 theo phút, ví dụ: 2023-05-26T10:20:00.00Z.

    Hãy lưu ý những điểm sau 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.
    • Đảm bảo rằng dấu thời gian bạn chỉ định là dấu thời gian theo 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 đã chỉ định, lỗi sẽ được tạo.
    • Bạn sẽ không bị tính phí cho lượt xuất dữ liệu PITR không thành công.

Nhập dữ liệu

Sau khi xuất tệp trong Cloud Storage, bạn có thể nhập các 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. 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. Tệp 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 một tài liệu có cùng mã nhận dạng đã tồn tại, 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 chịu ảnh hưởng của quá trình nhập, thì tài liệu đó sẽ vẫn còn trong cơ sở dữ liệu sau khi nhập.

  • Các thao tác nhập không kích hoạt Hàm trên đám mây. 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ừ một tệp xuất

Bảng điều khiển Google Cloud

  1. Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến 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 Tên tệp, hãy nhập tên tệp của tệp .overall_export_metadata từ một thao tác xuất đã hoàn tất. Bạn có thể sử dụng nút Duyệt qua để chọn tệp.

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

Bảng điều khiển sẽ quay lại 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. Nếu không thành công, trang sẽ hiển thị thông báo lỗi.

gcloud

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ơ sở dữ liệu. Đối với cơ sở dữ liệu mặc định, hãy sử 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 Google Cloud Console:

Mở trình duyệt Cloud Storage

Sau khi bạn bắt đầu một thao tác nhập, việc đóng thiết bị đầu cuối sẽ không huỷ thao tác đó, hãy xem phần huỷ thao tác.

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

Bảng điều khiển Google Cloud

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

gcloud

Để 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 bao gồm tất cả bộ sưu tập và bộ sưu tập con (ở bất kỳ đường dẫn nào) có mã nhận dạng 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ừ tệp 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

Hãy 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 có bất kỳ tài liệu nào đã tồn tại trong cơ sở dữ liệu, tài liệu đó sẽ bị ghi đè.

Quản lý các thao tác 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 tên riêng 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 toán tử có tiền tố là projects/[PROJECT_ID]/databases/(default)/operations/, ví dụ:

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

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

Liệt kê tất cả thao tác xuất và nhập

Bảng điều khiển Google Cloud

Bạn có thể xem danh sách các thao tác xuất và nhập gần đây trong trang Nhập/Xuất của Google Cloud Console.

  1. Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến 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.

gcloud

Sử dụng lệnh operations list để xem tất cả các thao tác xuất và nhập đang chạy cũng như mới hoàn tất:

gcloud firestore operations list

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

Bảng điều khiển Google Cloud

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.

  1. Trong Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến 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.

gcloud

Sử 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 thao tác chạy trong thời gian dài sẽ trả về các chỉ số workEstimatedworkCompleted. Mỗi chỉ số này được trả về theo cả số byte và số 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à tài liệu đã xử lý cho đế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 tính tiến trình một cách tương đối. Số liệu ước tính này có thể không chính xác vì nó phụ thuộc vào việc thu thập số liệu thống kê bị trễ.

Huỷ thao tác

Bảng điều khiển Google Cloud

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.

  1. Trong bảng điều khiển Google Cloud, 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 Lần nhập và xuất gần đây, các thao tác đang chạy bao gồm nút Huỷ trong cột Đã hoàn tất. Nhấp vào nút Huỷ để dừng thao tác. Nút này sẽ thay đổi thành thông báo Đang huỷ rồi thành Đã huỷ khi thao tác hoàn toàn dừng lại.

Bảng dữ liệu nhập và xuất gần đây trong bảng điều khiển cho thấy một lượt nhập dữ liệu đang diễn ra với lựa chọn Huỷ để dừng thao tác.

gcloud

Sử dụng lệnh operations cancel để dừng một thao tác đang diễn ra:

gcloud firestore operations cancel [OPERATION_NAME]

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

Xoá một thao tác

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

gcloud firestore operations delete [OPERATION_NAME]

Thông tin thanh toán và giá cho các hoạt động xuất và nhập

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

Các thao tác xuất và nhập sẽ bị tính phí cho việc đọc và ghi tài liệu theo mức giá được liệt kê trong phần giá Cloud Firestore. Mỗi thao tác xuất sẽ thực hiện một thao tác đọc cho mỗi tài liệu được xuất. Mỗi thao tác nhập sẽ thực hiện một thao tác ghi cho mỗi tài liệu được 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 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 thao tác xuất hoặc nhập sẽ không kích hoạt cảnh báo về ngân sách Google Cloud cho đến khi hoàn tất. Tương tự, các hoạt động đọc và ghi được thực hiện trong quá trình xuất hoặc nhập sẽ được áp dụng cho hạn mức hằng ngày sau khi quá trình này 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 của Cloud Billing, 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-firestoremanaged từ trình đơn bộ lọc.

Xuất sang BigQuery

Bạn có thể tải dữ liệu từ tệp xuất 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 xuất Cloud Firestore.

Giới hạn cột BigQuery

BigQuery áp dụng giới hạn 10.000 cột cho mỗi bảng. Các thao tác xuất 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 tập hợp sẽ trở thành một cột giản đồ.

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

Định dạng xuất và tệp siêu dữ liệu

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.

Các 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 chứa tệp xuất:

protoc --decode_raw < export0.export_metadata

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

Cloud Firestore sử dụng tác nhân dịch vụ Cloud Firestore để uỷ quyền cho các thao tác 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:

Tác nhân dịch vụ Cloud Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com

Cloud Firestore trước đây sử dụng tài khoản dịch vụ mặc định App Engine thay vì tác nhân dịch vụ 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 để chuyển sang sử dụng tác nhân dịch vụ Cloud Firestore.

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

Bạn nên sử dụng tác nhân dịch vụ Cloud Firestore vì tác nhân này dành riêng cho Cloud Firestore. Tài khoản dịch vụ App Engine được nhiều dịch vụ chia sẻ.

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

Trên trang Nhập/Xuất trong bảng điều khiển Google Cloud, bạn có thể xem tài khoản mà các thao tác nhập và xuất mà bạn sử dụng để uỷ quyền cho các yêu cầu. 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 Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến 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ụ Cloud Firestore, bạn có thể chuyển sang tác nhân dịch vụ Cloud Firestore bằng một trong những kỹ thuật sau:

Bạn nên sử dụng kỹ thuật đầu tiên trong số này vì kỹ thuật này sẽ xác định phạm vi hiệu ứng cho một dự án Cloud Firestore. Bạn không nên sử dụng kỹ thuật thứ hai vì kỹ thuật này không di chuyển các quyền đối với bộ chứa Cloud Storage hiện có. 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 quyền truy cập vào bộ chứa Cloud Storage

Quá trình di chuyển có hai bước:

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

Quyền đối với bộ chứa củ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ành công 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 yêu cầu thay đổi quyền. Theo mặc định, tác nhân dịch vụ 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 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 bộ chứa Cloud Storage. Nếu bạn chỉ cần cấp quyền đọc hoặc chỉ cấp quyền 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 Cloud Storage có thể yêu cầu cập nhật quyền.

Di chuyển dự án sang Tác nhân dịch vụ Firestore

Hoàn tất các bước sau để di chuyển từ tài khoản dịch vụ App Engine sang trình cung cấp 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, 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à một nút Check Bucket Status (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 tiềm ẩn 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 và danh sách các bộ chứa Cloud Storage. Có thể mất vài phút để tải xong danh sách.

    Danh sách này bao gồm các bộ chứa gần đây được sử dụng trong các thao tác 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ụ Cloud Firestore.

  5. Ghi lại tên chính của tác nhân dịch vụ Cloud Firestore trong dự án. Tên nhân viên hỗ trợ dịch vụ 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ất kỳ bộ chứa nào trong danh sách mà bạn sẽ sử dụng cho các thao tác nhập hoặc xuất trong tương lai, hãy hoàn thành 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 Bên giao đại lý mới, hãy nhập tên của nhân viên hỗ trợ dịch vụ Cloud Firestore.
    4. Trong trường Chọn vai trò, hãy chọn Trình tác nhân dịch vụ > Trình tác nhân dịch vụ Firestore.
    5. Nhấp vào Lưu.
    6. Quay lại thẻ có trang Nhập/Xuất 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 của danh sách.
  7. Nhấp vào Di chuyển sang Trình đại diện dịch vụ Firestore. Nếu vẫn còn các bộ chứa không kiểm tra được quyền, bạn cần xác nhận việc di chuyển bằng cách nhấp vào Di chuyển.

    Bạn sẽ nhận được thông báo khi 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 Google Cloud Console, hãy chuyển đến trang Databases (Cơ sở dữ liệu).

    Chuyển đến 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 người dùng chính bên cạnh nhãn Import/Export jobs run as (Chạy công việc Nhập/Xuất dưới dạng).

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

    Nếu dự án chưa được di chuyển, một biểu ngữ sẽ xuất hiện ở đầu trang cùng với nút Check Bucket Status (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 quy tắc ràng buộc về 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:

    Yêu cầu Nhân viên hỗ trợ dịch vụ Firestore để nhập/xuất (firestore.requireP4SAforImportExport).

    Quy tắc ràng buộc này yêu cầu các thao tác nhập và xuất 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 chính sách tổ chức này không tự động cấp quyền bộ chứa Cloud Storage thích hợp cho tác nhân dịch vụ Cloud Firestore.

Nếu quy tắc ràng buộc tạo ra lỗi quyền cho bất kỳ quy trình nhập hoặc xuất nào, bạn có thể tắt quy tắc ràng buộc đó để 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 quyền truy cập vào bộ chứa Cloud Storage, bạn có thể bật lại quy tắc ràng buộc.