创建和管理数据库

本页面介绍如何创建、更新和删除 Cloud Firestore 数据库。可为每个项目创建多个 Cloud Firestore 数据库。您可以使用多个数据库来设置生产环境和测试环境、隔离客户数据以及进行数据区域化。

免费层级使用量

Cloud Firestore 提供免费层级,让您可以免费开始使用。

对于免费层级,每个项目只能有一个 Cloud Firestore 数据库。在没有免费层级数据库的项目中创建的第一个数据库会获得免费层级。如果删除了应用免费层级的数据库,则下一个创建的数据库会获得免费层级。

须知事项

在创建数据库之前,您必须先完成以下操作:

  1. 如果您还没有 Firebase 项目,请创建一个:在 Firebase 控制台中,点击添加项目,然后按照屏幕上的说明创建 Firebase 项目或将 Firebase 服务添加到现有 Google Cloud 项目。

  2. 按照下一部分所述分配适当的 Identity and Access Management 角色。

所需的角色

如需创建和管理数据库,您需要拥有 OwnerDatastore Owner Identity and Access Management 角色。这些角色会授予所需的权限。

所需权限

如需管理数据库,您需要具有以下权限:

  • 创建数据库:datastore.databases.create
  • 读取数据库配置:datastore.databases.getMetadata
  • 配置数据库:datastore.databases.update
  • 删除数据库:datastore.databases.delete
  • 克隆数据库:datastore.databases.clone

创建数据库

如需创建 Cloud Firestore 数据库,请使用以下方法之一:

Firebase 控制台
  1. Firebase 控制台中,前往 Firestore 数据库页面。

    前往 Firestore 数据库

  2. 点击添加数据库
  3. 选择企业版。点击下一步
  4. 选择原生模式 Firestore
  5. 输入数据库 ID。
  6. 选择数据库的位置。点击下一步
  7. 为您的 Cloud Firestore Security Rules选择一个初始模式:

    测试模式
    此模式适合刚开始使用移动和 Web 客户端库的开发者,但会允许任何人读取和覆盖您的数据。测试完成后,务必查看保护您的数据部分
    生产模式
    拒绝来自移动和 Web 客户端的所有读写操作。经过身份验证的应用服务器(Node.js、Python、Java)仍然可以访问您的数据库
  8. 点击创建
gcloud CLI

使用 gcloud firestore databases create 命令:

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--edition=enterprise \
--enable-firestore-data-access \
--no-enable-mongodb-compatible-data-access \
--enable-realtime-updates

替换以下内容:

数据库 ID

有效的数据库 ID 包括符合以下要求的 ID:

  • 仅包含字母、数字和连字符 (-)。
  • 字母必须小写。
  • 第一个字符必须是字母。
  • 最后一个字符必须是字母或数字。
  • 最少 4 个字符。
  • 最多 63 个字符。
  • 不得为 UUID 或与 UUID 类似。例如,请勿使用 f47ac10b-58cc-0372-8567-0e02b2c3d479 之类的 ID。

如果删除了数据库,则要等到 5 分钟后,才能立即重复使用数据库 ID。

删除保护

使用删除保护可防止意外删除数据库。删除防护的工作方式如下:

  • 在停用删除防护之前,您无法删除启用了删除防护的数据库。
  • 删除防护默认处于停用状态。
  • 您可以在创建数据库时启用删除防护,也可以更新数据库配置以启用删除防护。

列出数据库

使用以下方法之一列出您的数据库:

gcloud CLI

使用 gcloud firestore databases list 命令列出项目中的所有数据库。

gcloud firestore databases list

查看数据库详细信息

如需查看单个数据库的详细信息,请使用以下方法之一:

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。

删除数据库

如需删除数据库,请使用控制台或命令行工具。 删除数据库不会产生删除操作费用。

如果数据库启用了删除保护设置,则必须先停用删除保护

gcloud CLI

使用“gcloud firestore databases delete”命令。

gcloud firestore databases delete --database=DATABASE_ID

DATABASE_ID 替换为要删除的数据库的 ID。

克隆数据库:

您可以将现有数据库在选定时间点的数据克隆到新的数据库中:

  • 克隆的数据库是一个新数据库,将在源数据库所在的同一位置创建。

    为了创建克隆,Cloud Firestore 使用源数据库的时间点恢复 (PITR) 数据。克隆的数据库包含所有数据和索引。

  • 默认情况下,克隆的数据库将采用与源数据库相同的加密方式(Google 默认加密或 CMEK 加密)。您可以指定其他加密类型,也可以使用其他密钥进行 CMEK 加密。

  • 时间戳的粒度为 1 分钟,它指定了过去的一个时间点,该时间点必须在 PITR 时间窗口定义的时段内:

    • 如果数据库已启用 PITR,您可以选择过去 7 天内的任意一分钟(如果 PITR 启用时间不足 7 天,则可选择启用以来的任意一分钟)。
    • 如果未启用 PITR,您可以选择过去一小时内的任意一分钟。
    • 您可以在数据库的说明中查看可选择的最早时间戳。

控制台

  1. 在 Google Cloud 控制台中,转到数据库页面。

    前往“数据库”

  2. 在要克隆的数据库对应的表行中,点击 查看更多。点击克隆。随即会出现创建克隆对话框。

  3. 创建克隆对话框中,提供克隆数据库时要使用的参数:

    1. 为克隆分配一个 ID 字段中,输入新克隆数据库的数据库 ID。此数据库 ID 不能与现有数据库关联。

    2. 从以下时间点开始克隆字段中,选择要用于克隆的时间点。所选时间对应于以分钟为粒度的 PITR 时间戳。

  4. 点击创建克隆

gcloud

使用 gcloud firestore databases clone 命令克隆数据库:

gcloud 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.00Z2025-06-01T10:30:00.00-07:00

  • DESTINATION_DATABASE_ID:新克隆数据库的数据库 ID。此数据库 ID 必须与现有数据库无关联。

示例:

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

如果您希望在克隆数据库时绑定特定标签,请在上一条命令中加入 --tags 标志,该标志可用于提供要绑定的可选标签键值对 (KEY=VALUE) 列表。

示例:

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

默认情况下,克隆的数据库将具有与源数据库相同的加密配置。如需更改加密配置,请使用 --encryption-type 参数:

  • (默认)use-source-encryption:使用与源数据库相同的加密配置。
  • google-default-encryption:使用 Google 的默认加密方式。
  • customer-managed-encryption:使用 CMEK 加密。在 --kms-key-name 参数中指定密钥 ID

以下示例展示了如何为克隆的数据库配置 CMEK 加密:

gcloud firestore databases clone \
--source-database='projects/example-project/databases/example-source-db' \
--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'

Firebase CLI

使用 firebase firestore:databases:clone 命令克隆数据库:

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

替换以下内容:

  • SOURCE_DATABASE:要克隆的现有数据库的名称。该名称使用 projects/PROJECT_ID/databases/SOURCE_DATABASE_ID 格式。

  • DESTINATION_DATABASE:新克隆数据库的名称。该名称使用 projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID 格式。 此数据库名称不得与任何现有数据库关联。

  • PITR_TIMESTAMP:采用 RFC 3339 格式PITR 时间戳,精确到分钟。例如:2025-06-01T10:20:00.00Z2025-06-01T10:30:00.00-07:00。如果未指定,系统会选择当前时间,并向下取整到分钟。

默认情况下,克隆的数据库将具有与源数据库相同的加密配置。如需更改加密配置,请使用 --encryption-type 参数:

  • (默认)USE_SOURCE_ENCRYPTION:使用与源数据库相同的加密配置。
  • GOOGLE_DEFAULT_ENCRYPTION:使用 Google 的默认加密方式。
  • CUSTOMER_MANAGED_ENCRYPTION:使用 CMEK 加密。在 --kms-key-name 参数中指定密钥 ID

配置每个数据库的访问权限

您可以使用 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:您的项目 ID
  • EMAIL:表示特定账号的邮箱。例如 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:您的项目 ID
  • EMAIL:表示特定账号的邮箱。例如 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:您的项目 ID
  • EMAIL:表示特定账号的邮箱。例如 alice@example.com

限制

每个项目最多可以有 100 个数据库。 您可以与支持团队联系,申请提高此限制。

后续步骤