本文介紹優化圖數據庫GDB性能的方法,幫助您快速定位圖數據庫GDB的性能問題,提升查詢效率。
設置查詢范圍
圖數據庫GDB的查詢分析引擎程序能夠根據數據輸入提供適合需求的查詢方式。當查詢數據量大時,您可以指定查找數據的范圍(特定的label,查詢屬性的起始范圍、終止范圍、迭代次數等)。
示例:
推薦方案(將過濾屬性限制在10~30內)
g.V().hasLabel("person").has("age",P.gt(10).and(lt(30))).limit(5)
普通方案
g.V().has("age",P.gt(10))
查詢最短路徑
圖數據庫GDB采用DFS(深度優先搜索)策略實現最短路徑,當您的業務中圖數據的連通規模非常大時,您可以在進行最短路徑查詢時添加限制條件。
示例:
推薦方案(限制了最短路徑的最大深度)
g.V($startV).repeat(both().simplePath()).until(hasId($endV).or().loops().is(gt($depth))).hasId($endV).path()
普通方案
g.V($startV).repeat(both().simplePath()).until(hasId($endV))
當您的業務中需要將數據按照權重進行最短路徑查詢,您可以按照邊的權重進行排序。
示例:
g.V(fromVertexId) .repeat(outE().inV().simplePath()) .until(hasId(toVertexId).or().loops().is(gt(deepLimit))) .hasId(toVertexId).path().as(‘p’) .map(unfold().coalesce(values(‘weight’),constant(0.0)).sum()) .as(‘cost’).select(‘cost’,’p’).order().by(select(“cost”),Order.incr)
規避超級頂點
圖數據庫GDB具有自動索引機制和強大的統計分析引擎,為您提供適合的執行優化。即使如此,也建議您在使用圖數據庫GDB時通過規則規避業務中的超級頂點。
查詢修改的合并語句
如果您的業務需要在使用Gremlin查詢的同時修改property
,您可以使用查詢修改的合并語句。
示例:
g.V("test").property("nums", union(values("nums"), constant(1)).sum())
查詢超時分析
如果您的業務場景比較復雜,容易出現超時的情況,您可以使用profile()
語句,對查詢中每一步的執行性能進行分析。通過性能分析,您可以對查詢執行中涉及到的數據分布情況有明確了解(例如超級頂點、隨機查詢大量數據、屬性過濾等比較耗時的數據)。
查詢請求示例:
g.V().out().limit(10).profile()
返回數據示例:
==>Traversal Metrics
Step Count Traverses Time (ms) % Dur
=============================================================================================================
GraphDbGraphStep(vertex,[]) 29 29 1.657 77.43
VertexStep(OUT,vertex) 11 11 0.410 19.18
RangeGlobalStep(0,10) 10 10 0.072 3.39
>TOTAL - - 2.140 -
執行profile()
后生成的TraversalMetrics
對象包含如下信息:
Step
(步驟):當前在遍歷中被分析的步驟,更多信息請參見Gremlin(中文)。Count
(計數):通過該步驟過濾的遍歷數量。Traverses
(遍歷):通過該步驟過濾的去重后的遍歷數量。Time (ms)
(時間):該步驟主動執行遍歷的總時間,單位:毫秒。% Dur
:該步驟的耗時占總時間的百分比。
DMS不支持profile()
命令,建議您通過Gremlin Console連接實例后使用該命令。如何通過Gremlin Console連接實例,請參見通過Gremlin Console連接實例。