Làm việc với phục hồi tại thời điểm (PITR)

Trang này mô tả cách sử dụng khôi phục tại thời điểm (PITR) để giữ lại và khôi phục dữ liệu trong Cloud Firestore.

Để hiểu các khái niệm PITR, hãy xem Khôi phục theo thời điểm .

Quyền

Để có được các quyền bạn cần để quản lý cài đặt PITR, hãy yêu cầu quản trị viên cấp cho bạn các vai trò IAM sau trong dự án mà bạn muốn bật PITR:

  • Chủ sở hữu kho dữ liệu đám mây ( roles/datastore.owner )

Đối với vai trò tùy chỉnh, hãy đảm bảo cấp các quyền sau:

  • Để bật PITR khi tạo cơ sở dữ liệu: datastore.databases.create
  • Để cập nhật cài đặt PITR trên cơ sở dữ liệu hiện có: datastore.databases.update , datastore.databases.list
  • Để thực hiện đọc dữ liệu PITR: datastore.databases.get , datastore.entities.get , datastore.entities.list
  • Để xuất dữ liệu PITR: datastore.databases.export
  • Để nhập dữ liệu PITR: datastore.databases.import

Trước khi bắt đầu

Lưu ý những điểm sau trước khi bạn bắt đầu sử dụng PITR:

  • Bạn không thể bắt đầu đọc từ bảy ngày trước ngay sau khi bật PITR.
  • Nếu muốn bật PITR khi tạo cơ sở dữ liệu, bạn phải sử dụng lệnh gcloud firestore databases create . Không hỗ trợ kích hoạt PITR trong khi tạo cơ sở dữ liệu bằng Bảng điều khiển GCP.
  • Cloud Firestore bắt đầu giữ lại các phiên bản từ thời điểm trở đi sau khi bật PITR.
  • Bạn không thể đọc dữ liệu PITR trong cửa sổ PITR sau khi tắt PITR.
  • Nếu bạn bật lại PITR ngay sau khi tắt nó, dữ liệu PITR trước đây sẽ không còn nữa. Mọi dữ liệu PITR được tạo trước khi tắt PITR sẽ bị xóa sau ngày hết hạn PITR.
  • Nếu bạn vô tình xóa dữ liệu trong một giờ qua và PITR bị tắt, bạn có thể khôi phục dữ liệu của mình bằng cách bật PITR trong vòng một giờ sau khi xóa.
  • Mọi thao tác đọc được thực hiện trên dữ liệu PITR đã hết hạn đều không thành công.

Kích hoạt PITR

Trước khi sử dụng PITR, hãy bật tính năng thanh toán cho dự án Google Cloud của bạn . 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 PITR.

Để bật PITR cho cơ sở dữ liệu của bạn:

Bảng điều khiển

  1. Trong Google Cloud Platform Console, hãy truy cập trang Cơ sở dữ liệu .

    Đi tới cơ sở dữ liệu

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

  3. Trong menu điều hướng, nhấp vào Khôi phục thảm họa .

  4. Bấm vào Chỉnh sửa để chỉnh sửa cài đặt.

  5. Chọn hộp kiểm Bật khôi phục tại thời điểm rồi bấm Lưu .

Việc kích hoạt PITR sẽ phải chịu chi phí lưu trữ. Xem Giá cả để biết thêm thông tin.

Để tắt PITR, hãy bỏ chọn hộp kiểm Bật khôi phục tại thời điểm từ trang Khôi phục thảm họa trong Bảng điều khiển GCP.

gcloud

Kích hoạt PITR trong quá trình tạo cơ sở dữ liệu bằng lệnh gcloud firestore databases create như sau:

gcloud firestore databases create\
  --location=LOCATION\
  [--database=DATABASE_ID; default="(default)"]\
  [--type=TYPE; default="firestore-native"]\
  --enable-pitr

Thay thế các giá trị như sau:

  • Location - vị trí nơi bạn muốn tạo cơ sở dữ liệu của mình.
  • DATABASE_ID - đặt thành ID cơ sở dữ liệu hoặc (mặc định).
  • TYPE - được đặt thành firestore-bản địa.

Bạn có thể tắt PITR bằng lệnh gcloud firestore databases update như sau:

gcloud firestore databases update\
  [--database=DATABASE_ID; default="(default)"]\
  --no-enable-pitr

Thay thế các giá trị như sau:

  • DATABASE_ID - đặt thành ID cơ sở dữ liệu hoặc (mặc định).

Lấy thời gian lưu giữ và thời gian phiên bản sớm nhất

Bảng điều khiển

  1. Trong Google Cloud Platform Console, hãy truy cập trang Cơ sở dữ liệu .

    Đi tới cơ sở dữ liệu

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

  3. Trong menu điều hướng, nhấp vào Khôi phục thảm họa .

  4. Trong phần Cài đặt lưu ý Khoảng thời gian lưu giữThời gian phiên bản sớm nhất .

    • Thời gian lưu giữ : khoảng thời gian Cloud Firestore giữ lại tất cả các phiên bản dữ liệu cho cơ sở dữ liệu. Giá trị là một giờ khi PITR bị tắt và bảy ngày khi PITR được bật.
    • Thời gian phiên bản sớm nhất : dấu thời gian sớm nhất mà các phiên bản cũ hơn của dữ liệu có thể được đọc trong cửa sổ PITR. Giá trị này được Cloud Firestore cập nhật liên tục và trở nên cũ ngay khi được truy vấn. Nếu bạn đang sử dụng giá trị này để khôi phục dữ liệu, hãy đảm bảo tính đến thời gian từ thời điểm giá trị được truy vấn đến thời điểm bạn bắt đầu khôi phục.
    • Khôi phục tại thời điểm : hiển thị Enabled , nếu PITR được bật. Nếu PITR bị tắt, bạn sẽ thấy Disabled .

gcloud

Chạy lệnh mô tả cơ sở dữ liệu gcloud firestore như sau:

gcloud firestore databases describe --database=DATABASE_ID

Thay default DATABASE_ID bằng ID cơ sở dữ liệu hoặc .

Đây là đầu ra:

    appEngineIntegrationMode: ENABLED
    concurrencyMode: PESSIMISTIC
    createTime: '2021-03-24T17:02:35.234Z'
    deleteProtectionState: DELETE_PROTECTION_DISABLED
    earliestVersionTime: '2023-06-12T16:17:25.222474Z'
    etag: IIDayqOevv8CMNTvyNK4uv8C
    keyPrefix: s
    locationId: nam5
    name: projects/PROJECT_ID/databases/(default)
    pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
    type: FIRESTORE_NATIVE
    uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
    updateTime: '2021-11-17T17:48:22.171180Z'
    versionRetentionPeriod: 3600s

Ở đâu,

  • earliestVersionTime - dấu thời gian của dữ liệu PITR sớm nhất được lưu trữ.
  • pointInTimeRecoveryEnablement : hiển thị POINT_IN_TIME_RECOVERY_ENABLED , nếu PITR được bật. Nếu PITR bị tắt, bạn sẽ thấy POINT_IN_TIME_RECOVERY_DISABLED hoặc trường pointInTimeRecoveryEnablement có thể không được hiển thị.
  • versionRetentionPeriod - khoảng thời gian mà dữ liệu PITR được giữ lại tính bằng mili giây. Giá trị có thể là một giờ khi PITR bị tắt hoặc bảy ngày nếu PITR được bật.

Đọc dữ liệu PITR

Bạn có thể đọc dữ liệu PITR bằng cách sử dụng thư viện máy khách, phương thức API REST hoặc trình kết nối FirestoreIO Apache Beam.

Thư viện khách hàng

Java

Bạn phải sử dụng giao dịch ReadOnly để đọc dữ liệu PITR. Bạn không thể chỉ định trực tiếp readTime trong các lần đọc. Xem Giao dịch và ghi theo đợt để biết thêm thông tin.

  Firestore firestore = …

  TransactionOptions options =
          TransactionOptions.createReadOnlyOptionsBuilder()
              .setReadTime(
                  com.google.protobuf.Timestamp.newBuilder()
                      .setSeconds(1684098540L)
                      .setNanos(0))
              .build();

  ApiFuture<Void> futureTransaction = firestore.runTransaction(
              transaction -> {
                // Does a snapshot read document lookup
                final DocumentSnapshot documentResult =
                    transaction.get(documentReference).get();

                // Executes a snapshot read query
                final QuerySnapshot queryResult =
                  transaction.get(query).get();
              },
              options);

  // Blocks on transaction to complete
  futureTransaction.get();

Nút

Bạn phải sử dụng giao dịch ReadOnly để đọc dữ liệu PITR. Bạn không thể chỉ định trực tiếp readTime trong các lần đọc. Xem Giao dịch và ghi theo đợt để biết thêm thông tin.

  const documentSnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(documentRef),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
);

  const querySnapshot = await firestore.runTransaction(
    updateFunction => updateFunction.get(query),
    {readOnly: true, readTime: new Firestore.Timestamp(1684098540, 0)}
  )

API REST

Việc đọc PITR được hỗ trợ trong tất cả các phương thức đọc của Cloud Firestore, đó là get , list , batchGet , listCollectionIds , listDocuments , runQuery , runAggregationQueryphân vùngQuery .

Để thực hiện đọc bằng các phương thức REST, hãy thử một trong các tùy chọn sau:

  1. Trong yêu cầu phương thức đọc của bạn, hãy chuyển giá trị readTime dưới dạng dấu thời gian PITR được hỗ trợ trong phương thức readOptions . Dấu thời gian PITR có thể là dấu thời gian chính xác đến micro giây trong vòng một giờ qua hoặc dấu thời gian cả phút sau một giờ vừa qua, nhưng không sớm hơn earliestVersionTime .

  2. Sử dụng tham số readTime cùng với phương thức BeginTransaction như một phần của giao dịch ReadOnly cho nhiều lần đọc PITR.

Tia Apache

Sử dụng trình kết nối Cloud FirestoreIO Apache Beam để đọc hoặc ghi tài liệu trong cơ sở dữ liệu Cloud Firestore ở quy mô lớn với Dataflow.

Việc đọc PITR được hỗ trợ theo phương pháp đọc sau của trình kết nối Cloud FirestoreIO. Các phương thức đọc này hỗ trợ phương thức withReadTime(@Nullable Instant readTime) mà bạn có thể sử dụng để đọc PITR:

Java

Mã sau đây có thể được sử dụng với mã đường dẫn Dataflow mẫu cho các hoạt động đọc hoặc ghi hàng loạt. Ví dụ này sử dụng phương thức withReadTime(@Nullable Instant readTime) để đọc PITR.

  Instant readTime = Instant.ofEpochSecond(1684098540L);

  PCollection<Document> documents =
      pipeline
          .apply(Create.of(collectionId))
          .apply(
              new FilterDocumentsQuery(
                  firestoreOptions.getProjectId(), firestoreOptions.getDatabaseId()))
          .apply(FirestoreIO.v1().read().runQuery().withReadTime(readTime).withRpcQosOptions(rpcQosOptions).build())
  ...

Để biết danh sách đầy đủ các ví dụ readTime trong quy trình Dataflow, hãy xem kho lưu trữ Github .

Xuất và nhập từ dữ liệu 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à dấu thời gian nguyên một phút trong vòng bảy 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 ở dấu thời gian đã chỉ định thì thao tác xuất không thành công.

Hoạt động xuất PITR hỗ trợ tất cả các bộ lọc, bao gồm 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 theo 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 vào vùng lưu trữ của bạn.

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

    Ở đâu,

    • BUCKET_NAME_PATH - nhóm Lưu trữ đám mây hợp lệ có tiền tố đường dẫn tùy chọn nơi lưu trữ tệp xuất.
    • PITR_TIMESTAMP - dấu thời gian PITR ở mức độ chi tiết từng phút, ví dụ: 2023-05-26T10:20:00.00Z hoặc 2023-10-19T10:30:00.00-07:00 .
    • COLLECTION_IDS - danh sách ID bộ sưu tập hoặc ID nhóm bộ sưu tập, ví dụ: 'specific collection group1' , 'specific collection group2' .
    • NAMESPACE_IDS - ví dụ: danh sách ID không gian tên- 'customer' , 'orders' .

    Lưu ý các điểm sau trước khi xuất dữ liệu PITR:

    • Chỉ định dấu thời gian ở định dạng RFC 3339 . Ví dụ: 2023-05-26T10:20:00.00Z hoặc 2023-10-19T10:30:00.00-07:00 .
    • Đảm bảo rằng dấu thời gian bạn chỉ định là dấu thời gian nguyên phút trong vòng bảy 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 ở dấu thời gian đã chỉ định thì sẽ xảy ra lỗi. Dấu thời gian phải là cả phút, ngay cả khi thời gian được chỉ định nằm trong một giờ qua.
    • Bạn không bị tính phí cho lần xuất PITR không thành công.
  2. Nhập vào cơ sở dữ liệu.

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