圖數據庫入門教程-深入學習Gremlin(1):圖基本概念與操作

前言:Gremlin語言是圖數據庫最主流的查詢語言,是Apache TinkerPop框架下規範的圖語言,相當於SQL之於關係型數據庫。爲了圖數據庫使用者更好的掌握Gremlin這門圖語言,我們對Gremlin Steps進行了分類與總結,接下來將會出一個Gremlin系列文章(分25期來完成這個計劃),每一期會針對一類Step進行語法講解與實例分析。

深入學習Gremlin 系列文章鏈接彙總:https://blog.csdn.net/javeme/article/details/82631834

第1期 Gremlin Steps:
V()E()id()label()properties()valueMap()values()

本系列文章的Gremlin示例均在HugeGraph圖數據庫上執行,環境搭建可參考準備Gremlin執行環境,本文示例均以其中的“TinkerPop關係圖”爲初始數據,如下圖所示:
init-data

圖基本概念

  • 圖Graph:指關係圖。比如:同學及朋友關係圖、銀行轉賬圖等。
  • 頂點Vertex:一般指實體。比如:人、賬戶等。
  • 邊Edge:一般指關係。比如:朋友關係、轉賬動作等。
  • 屬性Property:頂點或邊可以包含屬性,比如:人的姓名、人的年齡、轉賬的時間。

下面使用一個例子來進一步理解上面的概念。如下圖片展示了一個“軟件、人”之間的關係圖。

圖示例

其中:

  • 包括4個頂點:3個“人”頂點、一個“軟件HugeGraph”頂點。
  • 包括5條邊:3條“創建created”邊、2條“認識knows”邊。
  • 包括若干屬性:如“HugeGraph”頂點包括“名稱name”、“標籤tag”、“語言lang”等屬性,一個屬性由屬性名和屬性值組成,如“lang:java”。

此外:

  • 頂點與邊有類別之分,如“HugeGraph”頂點的label是“software”、3個“人”頂點的label是“person”,在Gremlin裏面稱之爲“label”。
  • 頂點與邊均由id來唯一標識,Gremlin裏頂點與邊必須包括id,一般圖數據庫的頂點id或邊id均由系統自動生成。

圖基本操作

對圖基本概念有了初步瞭解之後,我們接下來學習如何使用Gremlin去操作它。首先準備好一些數據,這裏以搭建環境文章中的“TinkerPop關係圖”爲例。下面將要學習的Gremlin Steps包括:

V()E()id()label()properties()valueMap()values()

  1. Step V():查詢頂點,一般作爲圖查詢的第1步,後面可以續接的語句種類繁多(後續會一一講解)。

    示例:

    // 查詢圖中所有的頂點
    // 注意:g 代表的是整個圖
    // 一切查詢都是以圖開始
    g.V()
    

    g.V()

    // 根據id查詢頂點
    g.V('4:Gremlin', '3:TinkerPop')
    

    g.V(id)

    請嘗試執行語句g.V('4:Gremlin').in('supports') ---- 查詢支持Gremlin語言的所有圖數據庫。

  2. Step E():查詢邊,一般作爲圖查詢的第1步,後面可以續接的語句種類繁多。

    示例:

    // 查詢圖中所有的邊
    g.E()
    

    g.E()

    // 根據id查詢邊
    g.E('S3:TinkerPop>4>>S4:Gremlin')
    

    g.E(id)

  3. Step id():獲取頂點、邊的id。

    示例:

    // 查詢所有頂點的id
    g.V().id()
    

    g.V().id()

    類似的,通過g.E().id()查詢所有邊的id。

    注意:Gremlin Step是作用在上一步產生的結果集上,如果上一步的結果是多個元素,那麼這裏id()將返回多個元素的id。

  4. Step label():獲取頂點、邊的label。

    示例:

    // 查詢所有頂點的label
    g.V().label()
    

    g.V().label()

    類似的,通過g.E().label()查詢所有邊的label。

  5. Step properties():獲取頂點、邊的屬性。

    示例:

    // 查詢所有頂點的屬性
    g.V().properties()
    
    // 查詢所有頂點的“lang”屬性
    // 如果無“lang”屬性的頂點將跳過
    g.V().properties('lang')
    

    類似的,通過g.E().properties()查詢所有邊的屬性。

    此外 properties()還可以和 key()value()搭配使用,以獲取屬性的名稱或值。

    示例 key()

    // 查詢所有頂點的屬性名稱
    g.V().properties().key()
    

    g.V().properties().key()

    示例 value()

    // 查詢所有頂點的屬性值
    g.V().properties().value()
    

    g.V().properties().value()

  6. Step valueMap():獲取頂點、邊的屬性, valueMap()properties()不同的地方是:它們返回的結構不一樣,後者將所有的屬性扁平化到一個大列表裏面,一個元素代表一個屬性;前者保持一個頂點或一條邊的屬性作爲一組,每一組由若干屬性的鍵值對組成。

    示例:

    // 查詢所有頂點的屬性
    g.V().valueMap()
    

    類似的,通過g.E().valueMap()查詢所有邊的屬性。

  7. Step values():獲取頂點、邊的屬性值。

    示例:

    // 查詢所有頂點的屬性值
    // 效果等同於:
    // g.V().properties().value()
    g.V().values()
    

    g.V().values()

    // 查詢所有頂點的“lang”屬性
    // 效果等同於:
    // g.V().properties('lang').value()
    g.V().values('lang')
    

    類似的,通過g.E().values()查詢所有邊的屬性值。

下一期:深入學習Gremlin(2):邊的遍歷操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章