簡體   English   中英

Gremlin 查詢掛起和/或條件

[英]Gremlin query hangs with and/or condition

我有一個圖 model region (頂點)-> has_person (邊)-> person (頂點)。 我想獲得具有名為 Tom 的personregion頂點。

此查詢工作正常: gV().hasLabel("person").has("name", "Tom").inE("has_person").outV().hasLabel("region")

但是為什么以下查詢會掛起:

g.V().hasLabel("region").and(
    __.hasLabel("person").has("name", "Tom").inE("has_person").outV().hasLabel("region")
)

g.V().and(
    __.hasLabel("person").has("name", "Tom").inE("has_person").outV().hasLabel("region")
).hasLabel("region")

在使用 Gremlin 編寫圖遍歷時,您需要考慮您使用的圖數據庫如何優化您的遍歷(例如,是否使用了全局索引)?

您應該考慮圖形數據庫的索引能力並檢查profile()步驟的 output。 它會告訴您是否正在使用索引以及在哪里使用。 我的猜測是,“正常”工作的查詢正在使用和索引來查找“Tom”,然后能夠快速遍歷該索引以找到與他相關的“has_person”邊緣的區域。 大多數圖表都能夠優化這種模式。 大多數圖表通常不會對“掛起”的以下查詢進行優化以利用索引,這主要是因為您使用and()步驟選擇的模式不是大多數優化所尋求的模式。 我的猜測是,這兩種遍歷幾乎都是在內存中過濾的。

Fwiw,你的查詢“正常”是寫的最佳方式,我認為你的 state 是你想要的 output。 我認為您的第一個懸掛查詢不會返回結果,因為它要求頂點具有 label 既是“區域”又是“人”,這是不可能的。 第二個掛起的查詢似乎首先不需要and()並且雙重過濾“區域”label。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM