在OrientDB中,每個頂點都連接了相連的邊。這意味着可以使用嵌套的「select」語句顯式地從集合中走過節點。ArangoDB通過節點屬性高效遍歷
舉一個例子:給定一個節點屬性的路徑,找到匹配的末端節點。 路徑由節點屬性列表組成(例如,kind
在路徑中的節點中是唯一的)。
現在,假設我有一棵樹:
kind=site, name=site1
-- kind=project, name=project1
-- kind=library, name=library1
kind=site, name=site2
-- kind=project, name=project2
-- kind=library, name=library1
用戶想從一個名爲LIBRARY1與路徑庫中的信息:由於沒有每個節點的遍歷完全合格
[{kind=site},{kind=project,name=project1},{kind=library,name=library1}]
是好的只要結果是單個節點即可。
在OrientDB,該過程將是:
- 開始與種類的所有節點=網站
- 穿行的「孩子」的邊緣,並收集那些 KIND =項目和名稱的所有對象= PROJECT1
- 穿行孩子邊和收集是 樣=庫和名稱= LIBRARY1
這可以在東北進行的所有對象sted select語句。種類字段被編入索引,以便從大量對象中快速收集起始節點。爲了進一步提高性能,我知道哪些表在哪些表(集合)中,以便可以限定要從中選擇的對象數(從<表中選擇where type = site)。
在ArrangoDB中,只有邊具有節點綁定信息,所以具有節點的節點不能直接穿過連接的邊。在GRAPH_TRAVERSAL函數中,我可以通過示例指定起始集合。所以這個例子就是{kind = site}。這是否意味着必須通過掃描所有圖邊來收集節點的起始列表,基本上查看連接到整個圖中每個邊的輸入的每個節點?
這樣的查詢將如何制定(在AQL和/或arangojs),所以它不必開始全面掃描連接到邊緣的對象?
我也看不到如何發送示例頂點到arangojs遍歷函數。它似乎總是需要一個明確的起始頂點。
這正是我所期待的。我將在我的代碼中註釋查詢將受益於此功能的地方。我們仍處於可行性階段,所以我有一段時間。 – ggendel