创建和管理数据库
本页面介绍如何创建、更新和删除具有 MongoDB 兼容性的 Firestore 数据库。每个项目可以创建多个 Firestore 数据库。您可以使用多个数据库来设置生产环境和测试环境、隔离客户数据以及进行数据区域化。
免费层级使用量
Firestore 提供免费层级,让您可以零成本开始使用。
免费层级仅适用于每个项目中的一个 Firestore 数据库。在没有免费层级数据库的项目中创建的第一个数据库将获得免费层级。如果删除了应用了免费层的数据库,则下一个创建的数据库将获得免费层。
准备工作
在创建数据库之前,您必须完成以下操作:
-
Verify that billing is enabled for your Google Cloud project.
- 分配适当的 Identity and Access Management 角色,如下一部分所述。
所需的角色
如需创建和管理数据库,您需要拥有 Owner
或 Datastore Owner
Identity and Access Management 角色。这些角色会授予所需的权限。
所需权限
如需管理数据库,您需要以下权限:
- 创建数据库:
datastore.databases.create
- 读取数据库配置:
datastore.databases.getMetadata
- 配置数据库:
datastore.databases.update
- 删除数据库:
datastore.databases.delete
- 克隆数据库:
datastore.databases.clone
创建数据库
如需创建与 MongoDB 兼容的 Firestore 数据库,请使用以下方法之一:
Google Cloud 控制台
-
在 Google Cloud 控制台中,前往数据库页面。
- 点击创建 Firestore 数据库。
- 输入数据库 ID。
- 选择企业版。
- 为数据库选择一个位置。
- (可选)如果您需要自定义加密,请点击显示加密选项,然后配置加密选项。
- 点击创建数据库。
gcloud CLI
使用 gcloud firestore databases create
命令并设置 --edition=enterprise
。
gcloud firestore databases create \ --database=DATABASE_ID \ --location=LOCATION \ --edition=enterprise
替换以下内容:
- DATABASE_ID:有效的数据库 ID。
- LOCATION:与 MongoDB 兼容的 Firestore 多区域或区域的名称。
如需启用删除保护,请添加 --delete-protection
标志。
启用删除保护时,您无法删除数据库。您必须先停用此设置才能删除。默认情况下,此设置处于停用状态。
gcloud firestore databases create \ --database=DATABASE_ID \ --location=LOCATION \ --edition=enterprise \ --delete-protection
--tags=123/environment=production,123/costCenter=marketing
--tags=tagKeys/333=tagValues/444
Terraform
使用 google_firestore_database
资源并将 database_edition
设置为 ENTERPRISE
resource "google_firestore_database" "database" { name = "DATABASE_ID" location_id = "LOCATION" type = "FIRESTORE_NATIVE" database_edition = "ENTERPRISE" // Optional delete_protection_state = "DELETE_PROTECTION_STATE" }
替换以下内容:
- DATABASE_ID:有效的数据库 ID。
- LOCATION:与 MongoDB 兼容的 Firestore 多区域或区域的名称。
- DELETE_PROTECTION_ENABLEMENT:
DELETE_PROTECTION_ENABLED
或DELETE_PROTECTION_DISABLED
。
如需启用删除保护,请将 delete_protection_state
设置为 DELETE_PROTECTION_ENABLED
。
启用删除保护时,您无法删除数据库。您必须先停用此设置才能删除。默认情况下,此设置处于停用状态。
数据库 ID
有效的数据库 ID 包括符合以下要求的 ID:
- 仅包含字母、数字和连字符 (
-
)。 - 字母必须小写。
- 第一个字符必须是字母。
- 最后一个字符必须是字母或数字。
- 最少 4 个字符。
- 最多 63 个字符。
- 不得为 UUID 或与 UUID 类似。例如,请勿使用
f47ac10b-58cc-0372-8567-0e02b2c3d479
之类的 ID。
如果删除了数据库,则要等到 5 分钟后,才能立即重复使用数据库 ID。
删除保护
使用删除保护可防止意外删除数据库。删除保护功能的工作方式如下:
- 您无法删除已启用删除保护的数据库,必须先停用此设置。
- 删除保护默认处于停用状态。
- 您可以在创建数据库时启用删除保护,也可以更新数据库配置以启用删除保护。
列出数据库
使用以下方法之一列出您的数据库:
控制台
在 Google Cloud 控制台中,前往数据库页面。
gcloud CLI
使用 gcloud firestore databases list
命令列出项目中的所有数据库。
gcloud firestore databases list
查看数据库详细信息
如需查看单个数据库的详细信息,请使用以下方法之一:
控制台
-
在 Google Cloud 控制台中,前往数据库页面。
- 从数据库列表中选择一个数据库。
gcloud CLI
使用 gcloud firestore databases describe
命令:
gcloud firestore databases describe --database=DATABASE_ID
将 DATABASE_ID 替换为数据库 ID。
更新数据库配置
如需更新数据库的配置设置,请使用 gcloud firestore databases update
命令。
使用此命令可更改、启用或停用删除保护。
更新删除保护设置
如需对数据库启用删除保护,请使用带有 --delete-protection
标志的 gcloud firestore databases update
命令。例如:
gcloud CLI
gcloud firestore databases update --database=DATABASE_ID --delete-protection
将 DATABASE_ID 替换为数据库 ID。
如需对数据库停用删除保护,请使用带有 --no-delete-protection
标志的 gcloud firestore databases update
命令。例如:
gcloud CLI
gcloud firestore databases update --database=DATABASE_ID --no-delete-protection
将 DATABASE_ID 替换为数据库 ID。
删除数据库
如需删除数据库,请使用控制台或命令行工具。 删除数据库不会产生删除操作费用。
如果数据库启用了删除保护设置,则必须先停用删除保护。
Google Cloud 控制台
gcloud CLI
使用“gcloud firestore databases delete”命令。
gcloud firestore databases delete --database=DATABASE_ID
将 DATABASE_ID 替换为要删除的数据库的 ID。
克隆数据库:
您可以将现有数据库在选定时间点的数据克隆到新的数据库中:
克隆的数据库是一个新数据库,将在源数据库所在的同一位置创建。
为了创建克隆,Firestore 使用源数据库的时间点恢复 (PITR) 数据。克隆的数据库包含所有数据和索引。
默认情况下,克隆的数据库将采用与源数据库相同的加密方式(Google 默认加密或 CMEK 加密)。您可以指定其他加密类型,也可以使用其他密钥进行 CMEK 加密。
时间戳的粒度为 1 分钟,它指定了过去的一个时间点,该时间点必须在 PITR 时间窗口定义的时段内:
- 如果数据库已启用 PITR,您可以选择过去 7 天内的任意一分钟(如果 PITR 启用时间不足 7 天,则可选择启用以来的任意一分钟)。
- 如果未启用 PITR,您可以选择过去一小时内的任意一分钟。
- 您可以在数据库的说明中查看可选择的最早时间戳。
控制台
gcloud
使用 gcloud alpha firestore databases clone
命令克隆数据库:
gcloud alpha firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'
替换以下内容:
SOURCE_DATABASE:您要克隆的现有数据库的数据库名称。名称采用
projects/PROJECT_ID/databases/SOURCE_DATABASE_ID
格式。PITR_TIMESTAMP:采用 RFC 3339 格式的 PITR 时间戳,精确到分钟。例如:
2025-06-01T10:20:00.00Z
或2025-06-01T10:30:00.00-07:00
。DESTINATION_DATABASE_ID:新克隆数据库的数据库 ID。此数据库 ID 必须与现有数据库无关联。
示例:
gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db'
更改克隆数据库的加密配置
默认情况下,克隆的数据库将具有与源数据库相同的加密配置。如需更改加密配置,请使用 --encryption-type
参数:
- (默认)
use-source-encryption
:使用与源数据库相同的加密配置。 google-default-encryption
:使用 Google 的默认加密方式。customer-managed-encryption
:使用 CMEK 加密。在--kms-key-name
参数中指定密钥 ID。
以下示例展示了如何为克隆的数据库配置 CMEK 加密:
gcloud alpha firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='projects/example-project/databases/example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'
配置每个数据库的访问权限
您可以使用 Identity and Access Management Conditions 来配置每个数据库级别的访问权限。以下示例使用 Google Cloud CLI 为一个或多个数据库分配条件式访问权限。您还可以在 Google Cloud 控制台中定义 IAM 条件。
查看现有 IAM 政策
gcloud projects get-iam-policy PROJECT_ID
将 PROJECT_ID
设置为您的项目 ID。
授予对数据库的访问权限
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'
设置以下内容:
PROJECT_ID
:您的项目 IDEMAIL
:表示特定账号的电子邮件地址。例如alice@example.com
。DATABASE_ID
:数据库 ID。TITLE
:表达式的可选标题。DESCRIPTION
:表达式的可选说明。
授予对除一个数据库之外的所有其他数据库的访问权限
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'
设置以下内容:
PROJECT_ID
:您的项目 IDEMAIL
:表示特定账号的电子邮件地址。例如alice@example.com
。DATABASE_ID
:数据库 ID。TITLE
:表达式的可选标题。DESCRIPTION
:表达式的可选说明。
移除指定成员和角色的政策
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member='user:EMAIL' \
--role='roles/datastore.user' --all
设置以下内容:
PROJECT_ID
:您的项目 IDEMAIL
:表示特定账号的电子邮件地址。例如alice@example.com
。
限制
每个项目最多可以有 100 个数据库。您可以与支持团队联系,申请提高此限制。