2017-12-18 141 views
1

假設我有具有許多邊的超節點,並且希望快速返回給定節點的頂N邊。我怎樣才能做到這一點與arangodb頂點中心索引https://docs.arangodb.com/3.1/Manual/Indexing/VertexCentric.html用於排序的頂點中心索引

我可以創建skiplist頂點爲中心的指數

arangosh> db.collection.ensureIndex({ type: "skiplist", fields: [ "_from", "points" ] }) 

,但優化器不排序的查詢

FOR edge IN collection 
    FILTER edge._from == "vertices/123456" 
    SORT edge.points DESC 
    LIMIT 0, 10 
    RETURN edge 

看來還阿朗戈優化不拿起skiplist頂點爲中心的指數把它撿起來但是在遍歷語法中,文檔說它應該:

FOR v, e, p IN 3..5 OUTBOUND @start GRAPH @graphName 
    FILTER p.edges[*].points ALL >0 
    RETURN v 
+0

是否回暖的指數,如果你改變穿越深度爲' 1..5'或'1..1'? – CoDEmanX

+0

nope。它不是 – irriss

+0

請在GitHub上報告:https://github.com/arangodb/arangodb/issues/new。包括軟件版本以及可能的數據集。使用具有特定值分佈的完全相同的數據很重要,因爲基於選擇性估計,頂點中心索引並不總是優於默認邊索引。 – CoDEmanX

回答

0

快速返回頂部N條邊給定節點

這將是更好的開始節點:

FOR v, e IN 1..1 ANY @start @edges 
    SORT e.points DESC 
    LIMIT 10 
    RETURN e 

這應該是一樣好,你可以使用當前版本得到( 3.3)的ArangoDB,假設你讓ArangoDB索引_from - 我懷疑爲.points添加跳過列表會產生任何(有益的)區別,除非你可能在FILTER中使用它。

(我相信索引_from使用skiplist將是不明智的在這裏。如果edges是一個邊集合,它都已經被正確索引。)

+0

不幸的是,它不能這樣工作。使用標準的邊緣索引,它可以非常快速地找到給定節點的所有邊,但是它必須對它們進行迭代和排序。如果是超級節點,可能需要幾秒鐘。 – irriss

+0

@Ruslan - 我試圖澄清我的答案。如果你可以添加一個FILTER(例如.points> 0),那麼當然這可能會有所幫助。你能告訴我們在這個節點有多少條邊,你的各種查詢需要多長時間,以及我提出的查詢需要多長時間? – peak