管理数据库

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

(default) 数据库

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

如果您未指定数据库,则 Datastore 模式客户端库 且 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。选择地理位置。 点击创建数据库
gcloud

使用 gcloud firestore databases create 命令。

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

替换以下内容:

  • DATABASE_ID有效的数据库 ID
  • LOCATION:Datastore 模式多区域的名称 区域
  • DATABASE_TYPEfirestore-native(针对原生模式)或 datastore-mode(针对 Datastore 模式)。

--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
  • LOCATIONDatastore 模式多区域或区域的名称。
  • 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。

删除保护

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

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

命名的数据库包括任何未命名为 (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 事件触发器可能会在数据库被删除后停止运行,即使在创建了具有相同名称的新数据库后也不会恢复运行。

后续步骤