创建和管理数据库

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

(default) 数据库

如果您的应用不需要多个数据库,请使用 (default) 数据库。

如果您未指定数据库,则 Firestore 客户端库和 Google Cloud CLI 会默认连接到 (default) 数据库。

免费配额仅适用于 (default) 数据库。

所需的角色

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

所需权限

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

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

创建数据库

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

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

    前往“数据库”

  2. 点击创建数据库
  3. 选择数据库模式。点击继续
  4. 配置数据库。输入数据库 ID。选择地理位置。 为移动和 Web 客户端选择安全规则。 点击创建数据库
gcloud

使用 gcloud firestore databases create 命令。

gcloud firestore databases create \
--database=DATABASE_ID \
--location=LOCATION \
--type=DATABASE_TYPE \
[--delete-protection]

替换以下内容:

--delete-protection 是可选标志,用于启用删除保护。启用删除保护时,您无法删除数据库。您必须先停用此设置才能删除。默认情况下,此设置处于停用状态。

Firebase CLI
firebase firestore:databases:create DATABASE_ID \
--location=LOCATION \
[--delete-protection DELETE_PROTECTION_ENABLEMENT]

替换以下内容:

--delete-protection 是可选参数,用于启用删除保护。启用删除保护时,您无法删除数据库。您必须先停用此设置才能删除。默认情况下,此设置处于停用状态。

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
}

请替换以下内容:

  • DATABASE_ID有效的数据库 ID
  • LOCATIONFirestore 多区域或区域的名称。
  • DATABASE_TYPEFIRESTORE_NATIVE(针对原生模式)或 DATASTORE_MODE(针对 Datastore 模式)。
  • DELETE_PROTECTION_ENABLEMENTDELETE_PROTECTION_ENABLEDDELETE_PROTECTION_DISABLED

delete_protection_state 是可选参数,用于启用删除保护。启用删除保护时,您无法删除数据库。您必须先停用此设置才能删除。默认情况下,此设置处于停用状态。

数据库 ID

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

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

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

删除保护

使用删除保护可防止意外删除数据库。您无法删除已启用删除保护的数据库,必须先停用此设置。删除保护默认处于停用状态。您可以在创建数据库时启用删除保护,也可以更新数据库配置以启用删除保护。

为数据库设置 Firestore 安全规则

使用 Firebase CLI 将 Firestore 安全规则部署到您的每个数据库。请参阅管理和部署 Firestore 安全规则的指南

使用客户端库访问已命名数据库

命名的数据库包括任何未命名为 (default) 的数据库。默认情况下,Firebase SDK 和 Google API 客户端库会连接到项目中的 (default) Firestore 数据库。如需创建连接到已命名数据库的客户端,请在实例化客户端时设置数据库 ID。

列出数据库

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

控制台

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

前往“数据库”

gcloud

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

gcloud firestore databases list
Firebase CLI

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

firebase firestore:databases:list

查看数据库详细信息

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

gcloud

使用 gcloud firestore databases describe 命令:

gcloud firestore databases describe --database=DATABASE_ID
Firebase CLI

使用 firebase firestore:databases:get 命令:

firebase firestore:databases:get DATABASE_ID

DATABASE_ID 替换为数据库 ID。

更新数据库配置

如需更新数据库的配置设置,请使用 gcloud firestore databases update 命令。使用此命令可更改数据库类型或切换删除保护。

更改数据库类型

如需更新数据库的类型,请将 gcloud firestore databases update 命令与 --type= 标志结合使用。只有在数据库为空时,您才能更改类型。

gcloud
gcloud firestore databases update --database=DATABASE_ID \
--type=DATABASE_TYPE

替换以下内容:

  • DATABASE_ID:数据库 ID。
  • DATABASE_TYPEfirestore-native(针对原生模式)或 datastore-mode(针对 Datastore 模式)。

更新删除保护设置

如需对数据库启用删除保护,请使用带有 --delete-protection 标志的 gcloud firestore databases update 命令。例如:

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

DATABASE_ID 替换为数据库 ID。

如需对数据库停用删除保护,请使用带有 --no-delete-protection 标志的 gcloud firestore databases update 命令。例如:

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

DATABASE_ID 替换为数据库 ID。

删除数据库

如需删除数据库,请使用控制台或命令行工具。

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

如果数据库包含 App Engine 搜索数据blob 实体,您必须先删除这类数据。

删除数据库不会自动删除该数据库的任何 Eventarc 触发器。触发器会停止传送事件,但会继续存在,直到您删除触发器

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

    前往“数据库”

  2. 在要删除的数据库对应的表行中,点击 查看更多。点击删除。随即会出现一个对话框。
  3. 要删除数据库吗?对话框中,通过在文本字段中输入相应数据库 ID 来确认删除。点击删除。控制台会通知您操作成功还是失败。

    如果操作失败,请查看数据库详细信息并验证删除保护已停用。如需停用删除保护,请参阅更新删除保护设置

gcloud

使用“gcloud firestore databases delete”命令。

gcloud firestore databases delete --database=DATABASE_ID

DATABASE_ID 替换为要删除的数据库的 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:表示特定 Google 账号的电子邮件地址。例如 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:表示特定 Google 账号的电子邮件地址。例如 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:表示特定 Google 账号的电子邮件地址。例如 alice@example.com

Cloud Monitoring

Firestore 指标在两个受监控的资源下报告。

您可以通过查看 firestore.googleapis.com/Database 在数据库级别检查汇总指标。firestore_instance 下报告的指标在项目级层汇总。

限制

  • 每个项目最多可以有 100 个数据库。您可以与支持团队联系,申请提高此限制。
  • 如果 (default) 数据库包含任何 GAE 搜索数据,则无法删除该数据库。请使用 index delete api 删除 GAE 搜索数据。如果您最近删除了 GAE 搜索数据,则可能需要等待一段时间才能删除数据库。
  • 如果 (default) 数据库包含任何 blob 实体,则无法删除该数据库。请使用 Blobstore delete api 删除 Blobstore 数据。您可以在 Google Cloud 控制台中运行以下 GQL 查询,检查您的 (default) 数据库是否有 Blobstore 数据:SELECT * FROM __BlobInfo__
  • 在删除操作发生后的 5 分钟内,您不能重复使用数据库 ID。
  • Cloud Functions v1 不支持 Firestore 已命名数据库。请使用 Cloud Firestore 触发器(第 2 代)为已命名数据库配置事件。
  • Firestore 函数触发器 v1Firestore 事件触发器可能会在数据库被删除后停止运行,即使在创建了具有相同名称的新数据库后也不会恢复运行。

后续步骤