Quản lý cơ sở dữ liệu

Trang này mô tả cách tạo, cập nhật và xoá cơ sở dữ liệu Cloud Firestore. Bạn có thể tạo nhiều cơ sở dữ liệu Cloud Firestore cho mỗi dự án. Bạn có thể sử dụng nhiều cơ sở dữ liệu để thiết lập môi trường thử nghiệm và môi trường thực tế, tách biệt dữ liệu khách hàng và bản địa hoá dữ liệu.

Vai trò và quyền bắt buộc

Để tạo và quản lý cơ sở dữ liệu, bạn cần có vai trò sau đây trong Quản lý danh tính và quyền truy cập:

Vai trò đó cấp các quyền sau đây mà bạn cần để tạo và quản lý cơ sở dữ liệu:

  • Tạo cơ sở dữ liệu: datastore.databases.create
  • Đọc cấu hình cơ sở dữ liệu: datastore.databases.getMetadata
  • Định cấu hình cơ sở dữ liệu: datastore.databases.update
  • Xoá cơ sở dữ liệu: datastore.databases.delete
  • Sao chép cơ sở dữ liệu: datastore.databases.clone

Tạo cơ sở dữ liệu

Để tạo cơ sở dữ liệu, hãy sử dụng một trong các phương thức sau:

Bảng điều khiển
bảng điều khiển của Firebase
  1. Trong bảng điều khiển của Firebase, hãy chuyển đến phần Cơ sở dữ liệu và bộ nhớ > Firestore.

    Chuyển đến Firestore

  2. Nhấp vào Thêm cơ sở dữ liệu.
  3. Chọn Phiên bản tiêu chuẩn. Nhấp vào Tiếp theo.
  4. Nhập mã cơ sở dữ liệu.
  5. Chọn vị trí cho cơ sở dữ liệu của bạn. Nhấp vào Tiếp theo.
  6. Chọn chế độ khởi động cho Cloud Firestore Security Rules:

    Chế độ thử nghiệm
    Phù hợp để bắt đầu với thư viện ứng dụng web và di động, nhưng cho phép bất kỳ ai đọc và ghi đè dữ liệu của bạn. Sau khi thử nghiệm, hãy nhớ xem lại phần Bảo mật dữ liệu.
    Chế độ sản xuất
    Từ chối tất cả các thao tác đọc và ghi từ ứng dụng di động và ứng dụng web. Các máy chủ ứng dụng đã xác thực của bạn (Node.js, Python, Java) vẫn có thể truy cập vào cơ sở dữ liệu của bạn
  7. Nhấp vào Tạo.
gcloud

Sử dụng lệnh gcloud firestore databases create.

--delete-protection là cờ không bắt buộc để bật tính năng bảo vệ chống xoá. Bạn không thể xoá cơ sở dữ liệu đã bật tính năng bảo vệ xoá cho đến khi tắt chế độ cài đặt này. Cài đặt này bị tắt theo mặc định.

Để thêm thẻ vào cơ sở dữ liệu, hãy sử dụng cờ --tags. Ví dụ:

  • --tags=123/environment=production,123/costCenter=marketing
  • --tags=tagKeys/333=tagValues/444
Giao diện dòng lệnh (CLI) của Firebase
firebase firestore:databases:create DATABASE_ID \n--location=LOCATION \n[--edition EDITION] \n[--firestore-data-access FIRESTORE_ACCESS] \n[--realtime-updates REALTIME_UPDATES] \n[--delete-protection DELETE_PROTECTION_ENABLEMENT]

Thay thế nội dung sau:

Terraform
resource "google_firestore_database" "database" {
  project     = "project-id"
  name        = DATABASE_ID
  location_id = LOCATION
  type        = DATABASE_TYPE

  // Optional
  delete_protection_state = DELETE_PROTECTION_STATE
}

Thay thế nội dung sau:

delete_protection_state là một đối số không bắt buộc để bật tính năng bảo vệ xoá. Bạn không thể xoá cơ sở dữ liệu khi đang bật chế độ bảo vệ xoá cho đến khi tắt chế độ cài đặt này. Cài đặt này bị tắt theo mặc định.

Mã cơ sở dữ liệu

Mã nhận dạng cơ sở dữ liệu hợp lệ phải tuân thủ các quy tắc sau:

  • Chỉ bao gồm các ký tự chữ cái, số và dấu gạch nối (-).
  • Chữ cái phải là chữ thường.
  • Ký tự đầu tiên phải là một chữ cái.
  • Ký tự cuối cùng phải là một chữ cái hoặc số.
  • Tối thiểu 4 ký tự.
  • Có tối đa 63 ký tự.
  • Không được là UUID hoặc giống UUID. Ví dụ: không sử dụng mã nhận dạng như f47ac10b-58cc-0372-8567-0e02b2c3d479.

Có một ngoại lệ đối với các quy tắc này: Phiên bản Standard sẽ tạo một cơ sở dữ liệu có tên là (default) nếu bạn không tự nhập mã nhận dạng.

Xin lưu ý rằng sau khi xoá một cơ sở dữ liệu, bạn không thể sử dụng lại mã nhận dạng của cơ sở dữ liệu đó trong khoảng 5 phút.

Xoá chế độ bảo vệ

Sử dụng tính năng bảo vệ xoá để ngăn chặn việc vô tình xoá cơ sở dữ liệu. Bạn không thể xoá cơ sở dữ liệu đã bật tính năng bảo vệ xoá cho đến khi tắt tính năng này. Tính năng bảo vệ xoá bị tắt theo mặc định. Bạn có thể cập nhật cấu hình cơ sở dữ liệu để bật hoặc tắt tính năng bảo vệ xoá.

Thiết lập Cloud Firestore Security Rules cho cơ sở dữ liệu

Sử dụng CLI Firebase để triển khai Cloud Firestore Security Rules cho từng cơ sở dữ liệu của bạn. Tham khảo hướng dẫn quản lý và triển khai Cloud Firestore Security Rules.

Truy cập vào một cơ sở dữ liệu được đặt tên bằng thư viện ứng dụng

Cơ sở dữ liệu có tên bao gồm mọi cơ sở dữ liệu không có tên (default). Theo mặc định, Firebase SDK và Thư viện ứng dụng API của Google sẽ kết nối với cơ sở dữ liệu (default) Cloud Firestore trong một dự án. Để tạo một ứng dụng khách được kết nối với một cơ sở dữ liệu được đặt tên, hãy đặt mã cơ sở dữ liệu khi bạn tạo thực thể cho ứng dụng khách.

Liệt kê cơ sở dữ liệu

Sử dụng một trong các phương thức sau để liệt kê cơ sở dữ liệu của bạn:

Bảng điều khiển

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

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

gcloud

Sử dụng lệnh gcloud firestore databases list để liệt kê tất cả cơ sở dữ liệu trong dự án của bạn.

gcloud firestore databases list
Giao diện dòng lệnh (CLI) của Firebase

Sử dụng lệnh firebase firestore:databases:list để liệt kê tất cả cơ sở dữ liệu trong dự án của bạn.

firebase firestore:databases:list

Xem thông tin chi tiết về cơ sở dữ liệu

Để xem thông tin chi tiết về một cơ sở dữ liệu, hãy sử dụng một trong các phương thức sau:

gcloud

Sử dụng lệnh gcloud firestore databases describe:

gcloud firestore databases describe --database=DATABASE_ID
Giao diện dòng lệnh (CLI) của Firebase

Sử dụng lệnh firebase firestore:databases:get:

firebase firestore:databases:get DATABASE_ID

Kết quả cho cơ sở dữ liệu Enterprise bao gồm các trường sau:

  • Edition: ENTERPRISE
  • Firestore Data Access: DATA_ACCESS_MODE_ENABLED hoặc DATA_ACCESS_MODE_DISABLED
  • MongoDB Compatible Data Access: DATA_ACCESS_MODE_ENABLED hoặc DATA_ACCESS_MODE_DISABLED
  • Realtime Updates: REALTIME_UPDATES_ENABLED hoặc REALTIME_UPDATES_DISABLED

Thay thế DATABASE_ID bằng mã nhận dạng cơ sở dữ liệu.

Cập nhật cấu hình cơ sở dữ liệu

Để cập nhật chế độ cài đặt cấu hình của một cơ sở dữ liệu, hãy sử dụng lệnh gcloud firestore databases update. Sử dụng lệnh này để thay đổi nhằm bật hoặc tắt tính năng bảo vệ xoá.

Cập nhật chế độ cài đặt bảo vệ xoá

Để bật tính năng bảo vệ xoá trên cơ sở dữ liệu, hãy sử dụng lệnh gcloud firestore databases update có cờ --delete-protection. Ví dụ:

gcloud
gcloud firestore databases update --database=DATABASE_ID --delete-protection

Thay thế DATABASE_ID bằng mã nhận dạng cơ sở dữ liệu.

Để tắt tính năng bảo vệ xoá trên cơ sở dữ liệu, hãy sử dụng lệnh gcloud firestore databases update có cờ --no-delete-protection. Ví dụ:

gcloud
gcloud firestore databases update --database=DATABASE_ID --no-delete-protection

Thay thế DATABASE_ID bằng mã nhận dạng cơ sở dữ liệu.

Xoá cơ sở dữ liệu

Để xoá cơ sở dữ liệu, hãy sử dụng bảng điều khiển hoặc công cụ dòng lệnh.

Nếu cơ sở dữ liệu đã bật chế độ cài đặt bảo vệ xoá, trước tiên, bạn phải tắt chế độ bảo vệ xoá.

Nếu cơ sở dữ liệu chứa App Engine dữ liệu tìm kiếm hoặc thực thể blob, thì trước tiên, bạn phải xoá dữ liệu đó.

Việc xoá cơ sở dữ liệu sẽ không tự động xoá bất kỳ Eventarctrình kích hoạt nào cho cơ sở dữ liệu đó. Trình kích hoạt ngừng phân phối sự kiện nhưng vẫn tiếp tục tồn tại cho đến khi bạn xoá trình kích hoạt.

Bạn sẽ không bị tính phí cho thao tác xoá khi xoá cơ sở dữ liệu.

Bảng điều khiển
  1. Trong bảng điều khiển của Firebase, hãy chuyển đến phần Cơ sở dữ liệu và bộ nhớ > Firestore.

    Chuyển đến Firestore

  2. Trong thẻ Data (Dữ liệu), phía trên chế độ xem bảng dữ liệu cho cơ sở dữ liệu, hãy nhấp vào biểu tượng , sau đó chọn Delete database (Xoá cơ sở dữ liệu).
  3. Làm theo hướng dẫn để xoá cơ sở dữ liệu.
gcloud

Sử dụng lệnh `gcloud firestore databases delete`.

gcloud firestore databases delete --database=DATABASE_ID

Thay thế DATABASE_ID bằng mã nhận dạng của cơ sở dữ liệu cần xoá. Để xoá cơ sở dữ liệu mặc định, hãy sử dụng mã nhận dạng '(default)'

Sao chép cơ sở dữ liệu

Bạn có thể sao chép một cơ sở dữ liệu hiện có tại một dấu thời gian đã chọn vào một cơ sở dữ liệu mới:

  • Cơ sở dữ liệu được sao chép là một cơ sở dữ liệu mới sẽ được tạo ở cùng vị trí với cơ sở dữ liệu nguồn.

    Để tạo bản sao, Cloud Firestore sử dụng dữ liệu khôi phục tại thời điểm cụ thể (PITR) của cơ sở dữ liệu nguồn. Cơ sở dữ liệu được sao chép bao gồm tất cả dữ liệu và chỉ mục.

  • Theo mặc định, cơ sở dữ liệu được sao chép sẽ được mã hoá theo cùng cách với cơ sở dữ liệu nguồn, sử dụng phương thức mã hoá mặc định của Google hoặc phương thức mã hoá CMEK. Bạn có thể chỉ định một loại mã hoá khác hoặc sử dụng một khoá khác để mã hoá CMEK.

  • Dấu thời gian có mức độ chi tiết là một phút và chỉ định một thời điểm trong quá khứ, trong khoảng thời gian được xác định bằng khoảng thời gian PITR:

    • Nếu bạn bật tính năng PITR cho cơ sở dữ liệu của mình, bạn có thể chọn bất kỳ phút nào trong 7 ngày qua (hoặc ít hơn nếu bạn bật tính năng PITR chưa đến 7 ngày trước).
    • Nếu chưa bật tính năng PITR, bạn có thể chọn bất kỳ phút nào trong giờ vừa qua.
    • Bạn có thể kiểm tra dấu thời gian sớm nhất mà bạn có thể chọn trong phần mô tả của cơ sở dữ liệu.

Bảng điều khiển

  1. Mở trang Cơ sở dữ liệu và bộ nhớ > Firestore trong bảng điều khiển của Firebase.

  2. Bên cạnh tên cơ sở dữ liệu, hãy nhấp vào biểu tượng , rồi nhấp vào Sao chép cơ sở dữ liệu. Ngăn Sao chép cơ sở dữ liệu sẽ xuất hiện.

  3. Trong ngăn Clone database (Sao chép cơ sở dữ liệu), hãy cung cấp các tham số để sao chép cơ sở dữ liệu:

    1. Trong trường Mã cơ sở dữ liệu, hãy nhập mã cơ sở dữ liệu cho cơ sở dữ liệu mới được sao chép. Mã cơ sở dữ liệu không được trùng với mã của một cơ sở dữ liệu hiện có.

    2. Trong trường Sao chép từ, hãy chọn một thời điểm để sử dụng cho việc sao chép. Thời gian đã chọn tương ứng với dấu thời gian PITR, ở mức độ chi tiết theo phút.

  4. Nhấp vào Clone (Sao chép).

gcloud

Sử dụng lệnh gcloud firestore databases clone để sao chép cơ sở dữ liệu:

gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

Thay thế nội dung sau:

  • SOURCE_DATABASE: tên cơ sở dữ liệu của một cơ sở dữ liệu hiện có mà bạn muốn sao chép. Tên sử dụng định dạng projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • PITR_TIMESTAMP: dấu thời gian PITR ở định dạng RFC 3339, theo mức độ chi tiết từng phút. Ví dụ: 2025-06-01T10:20:00.00Z hoặc 2025-06-01T10:30:00.00-07:00.

  • DESTINATION_DATABASE_ID: mã nhận dạng cơ sở dữ liệu cho cơ sở dữ liệu mới được sao chép. Mã cơ sở dữ liệu này không được liên kết với một cơ sở dữ liệu hiện có.

Ví dụ:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

Nếu bạn muốn liên kết với một số thẻ trong khi sao chép cơ sở dữ liệu, hãy sử dụng lệnh trước đó với cờ --tags, đây là danh sách không bắt buộc gồm các cặp KEY=VALUE của thẻ để liên kết.

Ví dụ:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

Theo mặc định, cơ sở dữ liệu được sao chép sẽ có cấu hình mã hoá giống như cơ sở dữ liệu nguồn. Để thay đổi cấu hình mã hoá, hãy sử dụng đối số --encryption-type:

  • (Mặc định) use-source-encryption: sử dụng cùng một cấu hình mã hoá như cơ sở dữ liệu nguồn.
  • google-default-encryption: sử dụng phương thức mã hoá mặc định của Google.
  • customer-managed-encryption: sử dụng phương thức mã hoá CMEK. Chỉ định mã khoá trong đối số --kms-key-name.

Ví dụ sau đây cho thấy cách định cấu hình mã hoá CMEK cho cơ sở dữ liệu được sao chép:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

Giao diện dòng lệnh (CLI) của Firebase

Sử dụng lệnh firebase firestore:databases:clone để sao chép cơ sở dữ liệu:

firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'

Thay thế nội dung sau:

  • SOURCE_DATABASE: tên cơ sở dữ liệu của một cơ sở dữ liệu hiện có mà bạn muốn sao chép. Tên sử dụng định dạng projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • DESTINATION_DATABASE: tên cơ sở dữ liệu cho cơ sở dữ liệu mới được sao chép. Tên sử dụng định dạng projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID. Tên cơ sở dữ liệu này không được liên kết với một cơ sở dữ liệu hiện có.

  • PITR_TIMESTAMP: dấu thời gian PITR ở định dạng RFC 3339, theo mức độ chi tiết từng phút. Ví dụ: 2025-06-01T10:20:00.00Z hoặc 2025-06-01T10:30:00.00-07:00. Nếu bạn không chỉ định, thì ảnh chụp nhanh được chọn sẽ là thời gian hiện tại, được làm tròn xuống đến phút.

Theo mặc định, cơ sở dữ liệu được sao chép sẽ có cấu hình mã hoá giống như cơ sở dữ liệu nguồn. Để thay đổi cấu hình mã hoá, hãy sử dụng đối số --encryption-type:

  • (Mặc định) USE_SOURCE_ENCRYPTION: sử dụng cùng một cấu hình mã hoá như cơ sở dữ liệu nguồn.
  • GOOGLE_DEFAULT_ENCRYPTION: sử dụng phương thức mã hoá mặc định của Google.
  • CUSTOMER_MANAGED_ENCRYPTION: sử dụng phương thức mã hoá CMEK. Chỉ định mã khoá trong đối số --kms-key-name.

Định cấu hình quyền truy cập cho từng cơ sở dữ liệu

Bạn có thể sử dụng Điều kiện quản lý danh tính và quyền truy cập để định cấu hình quyền truy cập ở cấp độ từng cơ sở dữ liệu. Các ví dụ sau đây sử dụng Google Cloud CLI để chỉ định quyền truy cập có điều kiện cho một hoặc nhiều cơ sở dữ liệu. Bạn cũng có thể xác định các điều kiện IAM trong Google Cloud Console.

Xem các chính sách IAM hiện có

gcloud projects get-iam-policy PROJECT_ID

Đặt PROJECT_ID thành mã dự án của bạn.

Cấp quyền truy cập vào cơ sở dữ liệu

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name=="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

Đặt các giá trị sau:

  • PROJECT_ID: mã dự án của bạn
  • EMAIL: địa chỉ email đại diện cho một Tài khoản Google cụ thể. Ví dụ: alice@example.com.
  • DATABASE_ID: mã nhận dạng cơ sở dữ liệu.
  • TITLE: tiêu đề không bắt buộc cho biểu thức.
  • DESCRIPTION: nội dung mô tả không bắt buộc về biểu thức.

Cấp quyền truy cập vào tất cả cơ sở dữ liệu, ngoại trừ một cơ sở dữ liệu

gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' \
--condition='expression=resource.name!="projects/PROJECT_ID/databases/DATABASE_ID",title=TITLE,description=DESCRIPTION'

Đặt các giá trị sau:

  • PROJECT_ID: mã dự án của bạn
  • EMAIL: địa chỉ email đại diện cho một Tài khoản Google cụ thể. Ví dụ: alice@example.com.
  • DATABASE_ID: mã nhận dạng cơ sở dữ liệu.
  • TITLE: tiêu đề không bắt buộc cho biểu thức.
  • DESCRIPTION: nội dung mô tả không bắt buộc về biểu thức.

Xoá chính sách cho một thành viên và vai trò nhất định

gcloud projects remove-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' --all

Đặt các giá trị sau:

  • PROJECT_ID: mã dự án của bạn
  • EMAIL: địa chỉ email đại diện cho một Tài khoản Google cụ thể. Ví dụ: alice@example.com.

Cloud Monitoring

Cloud Firestore chỉ số được báo cáo trong hai tài nguyên được theo dõi.

Bạn có thể kiểm tra các chỉ số tổng hợp ở cấp cơ sở dữ liệu bằng cách xem firestore.googleapis.com/Database. Các chỉ số được báo cáo trong firestore_instance được tổng hợp ở cấp dự án.

Hạn chế

  • Bạn có thể có tối đa 100 cơ sở dữ liệu cho mỗi dự án. Bạn có thể liên hệ với nhóm hỗ trợ để yêu cầu tăng hạn mức này.
  • Bạn không thể xoá cơ sở dữ liệu (default) nếu cơ sở dữ liệu đó chứa bất kỳ dữ liệu tìm kiếm GAE nào. Sử dụng API xoá chỉ mục để xoá dữ liệu tìm kiếm trên GAE. Nếu gần đây bạn đã xoá dữ liệu GAE Search, thì có thể bạn sẽ phải chờ một khoảng thời gian trước khi có thể xoá cơ sở dữ liệu.
  • Bạn không thể xoá cơ sở dữ liệu (default) nếu cơ sở dữ liệu đó chứa bất kỳ thực thể blob nào. Sử dụng API xoá Blobstore để xoá dữ liệu Blobstore. Bạn có thể kiểm tra xem cơ sở dữ liệu (default) của mình có dữ liệu Blobstore hay không bằng cách chạy truy vấn GQL sau trong Google Cloud Console: SELECT * FROM __BlobInfo__.
  • Bạn không thể sử dụng lại mã nhận dạng cơ sở dữ liệu cho đến khi hết 5 phút sau khi xoá.
  • Cloud Functions phiên bản 1 không hỗ trợ Cơ sở dữ liệu có tên trong Firestore. Sử dụng Trình kích hoạt Cloud Firestore (thế hệ thứ 2) để định cấu hình sự kiện cho các cơ sở dữ liệu được đặt tên.
  • Trình kích hoạt hàm Firestore phiên bản 1 và Trình kích hoạt sự kiện Firestore có thể ngừng hoạt động sau khi cơ sở dữ liệu bị xoá, ngay cả khi cơ sở dữ liệu mới được tạo có cùng tên.

Bước tiếp theo