索引键的热图模式

本页介绍了您可能会在 Key Visualizer 热图中看到的模式示例。这些模式可帮助您排查特定的性能问题。

均匀分布使用量

显示均匀分布读写操作的热图

如果热图显示深色与亮色交织的粒状混合,则表示索引键的写入/删除操作均匀分布在整个数据库中。此热图可能表示 Firestore 的有效使用模式。

基于顺序键的索引

具有一条亮对角线的热图可以指示索引位于严格递增或递减的键(例如时间戳)上。索引已开启 不建议使用顺序键,因为这样做可能会产生热点。生成热点时, 那么延迟时间可能会延长

索引上常见热点的一些常见示例如下:

由于时间戳递增而导致的热点问题

热图显示因时间戳增加而导致的热点

在本例中,有一条亮对角线的热图可能表示 对时间戳使用严格增加或减少索引写入/删除操作的数据库 字段名称。

由于字段名称不断增加而导致的热点问题

热图:显示因字段增加而出现热点

在本例中,有一条亮对角线的热图可能表示 严格增加或减少索引写入/删除操作的数据库, 增量字段,例如自动生成的账单编号。

要确定热点问题,请使用 Key Visualizer 工具并了解索引键 结构来确定导致问题的索引并豁免这些索引 了解最佳实践

了解索引键结构

了解 Key Visualizer 中看到的索引键结构之前 工具,了解 Firestore 中的索引

以下代码显示了索引键格式示例,当您在热图上将鼠标悬停在受影响的键范围上时,就会看到此格式。

COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
  PROPERTIES: (Timestamp: DESC) 
  VALUES: (16500000000000001)
  DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

其中:

  • COLLECTION:集合在数据库中的位置。根据范围,它可以是集合范围的集合路径,也可以是集合组范围的集合名称。
  • 属性:用于创建索引的字段。__name__ 排序属性仅针对修改默认排序的索引定义显示。
  • VALUES:每个媒体资源的值。
  • DOCUMENT:在操作中更新的文档的 ID。

在前面的示例中,确定 PROPERTIES 字段中的字段 值查找受影响的索引。

如需查找索引,请完成以下步骤:

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

    前往“数据库”

  2. 从数据库列表中选择所需的数据库。

  3. 在导航菜单中,点击索引

  4. 前往复合单字段标签页。

    您可以通过分析 PROPERTIES 字段来确定索引的类型。请参阅 索引键示例

  5. 点击过滤条件,选择字段,然后输入字段名称。

    对于复合索引,请使用 OR 运算符添加更多字段。

确定导致问题的索引后,您可以使用以下解决方案:

  • 复合索引:修改索引,以确保值 单调递增或递减未选为第一个字段 索引或删除索引。

  • 单字段索引:为要豁免的字段和排序顺序添加豁免项。如需了解详情,请参阅添加单字段例外项

热图上的索引键条目示例

类型 说明 示例
集合范围单字段索引 ASC、DESC 默认情况下,Firestore 使用集合范围创建索引。

Timestamp 字段中单字段索引的索引条目,按 Users/5000000000000001 文档的降序顺序排列。
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
数组字段的集合范围单字段索引 对于文档中的每个数组字段,Firestore 会创建并维护集合范围“array-contains”索引。

array-contains 模式单字段索引的索引条目,系统会在向文档添加字段 Country: [USA, Japan] 时创建此类索引。请注意,默认情况下,系统还会为此字段创建 ASC、DESC 索引。该示例显示了 Country 字段的升序索引。
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES:(Country: ASC)
VALUES:([USA, Japan]) DOCUMENT:(projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
集合组单字段索引 ASC、DESC、ARRAY 集合组包含具有相同集合 ID 的所有集合。
Timestamp 字段中集合组单字段索引的索引条目(降序)。
COLLECTION GROUP: Users
PROPERTIES: (Timestamp: DESC)
VALUES: (16500000000000001L)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
集合组单字段索引 ASC、DESC、ARRAY array-contains 模式下 Country 字段的集合组单字段索引的索引条目 COLLECTION GROUP: Users PROPERTIES: (Country: ARRAY ASC) VALUES: (USA) DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001
包含 ASC、ASC、ARRAY 属性的集合复合索引条目 使用集合范围索引定义创建嵌套文档时,系统会创建包含父级的复合索引条目。

复合索引的索引条目,其中 TimestampName 字段按升序排列,Country 处于 array-contains 模式。
COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, Name: ASC,Country: ARRAY)
VALUES: (16500000000000001L, 'Alice', 'USA')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
具有 ASC、ASC 属性的集合组范围复合索引条目 基于 Timestamp 字段的复合索引的索引条目(按升序排列)和基于 Name 字段的复合索引的索引条目(按升序排列) COLLECTION GROUP: Users
PROPERTIES: (Timestamp: ASC, Name: ASC)
VALUES: (16500000000000001L, 'Alice')
DOCUMENT: (projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001)
具有 ASC 和 __name__ 属性的集合范围复合索引条目 对于 Users/5000000000000001 文档,Timestamp 字段中复合索引的索引条目按升序排序,__name__ 按降序排序。您可以使用 __name__ 作为索引定义中的最后一个字段,以更改结果的默认排序 COLLECTION: projects/PROJECT_ID/databases/(default)/documents/Users
PROPERTIES: (Timestamp: ASC, __name__ DESC)
VALUES: (16500000000000001)
DOCUMENT: projects/PROJECT_ID/databases/(default)/documents/Users/5000000000000001

后续步骤