索引鍵的熱視圖模式
本頁展示多個 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:資料庫中集合的位置。根據範圍,這可以是集合範圍的集合路徑,或是集合群組範圍的集合名稱。
- PROPERTIES:用於建立索引的欄位。只有在索引定義會修改預設排序時,才會顯示
__name__
排序屬性。 - VALUES:各屬性的值。
- DOCUMENT:在作業中更新的文件 ID。
從先前的範例中,找出 PROPERTIES 值中的欄位,以找出受影響的索引。
如要尋找索引,請完成下列步驟:
前往 Google Cloud 控制台的「Databases」頁面。
從資料庫清單中選取所需資料庫。
在導覽選單中,按一下「索引」。
前往「複合」或「單一欄位」分頁。
您可以分析 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 索引。 當欄位 Country: [USA, Japan] 新增至文件時,系統會建立陣列包含模式的單一欄位索引,並為該索引建立索引項目。請注意,系統也會預設為這個欄位建立 ASC 和 DESC 索引。這個範例顯示 Country 欄位的 ASC 索引。 |
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__ 屬性 |
複合式索引的索引項目,Timestamp 欄位為遞增排序,Users/5000000000000001 文件為遞減排序。__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。
- 瞭解如何深入探索熱視圖。
- 瞭解熱視圖中可以查看的指標。