索引键的热图模式
本页介绍了您可能会在 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 字段中的字段 值查找受影响的索引。
如需查找索引,请完成以下步骤:
在 Google Cloud 控制台中,转到数据库页面。
从数据库列表中选择所需的数据库。
在导航菜单中,点击索引。
前往复合或单字段标签页。
您可以通过分析 PROPERTIES 字段来确定索引的类型。请参阅 索引键示例。
点击过滤条件,选择字段,然后输入字段名称。
对于复合索引,请使用 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 属性的集合复合索引条目 | 使用集合范围索引定义创建嵌套文档时,系统会创建包含父级的复合索引条目。 复合索引的索引条目,其中 Timestamp 和 Name 字段按升序排列,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 |
后续步骤
- 了解如何开始使用 Key Visualizer。
- 了解如何详细探索热图。
- 了解可以在热图中查看的指标。