您的位置:首页 > 其它

深入学习Gremlin(1):图基本概念与操作

2018-09-07 20:07 127 查看
版权声明:转载请注明出处 https://blog.csdn.net/javeme/article/details/82501797

前言:为了图数据库使用者更好的掌握Gremlin这门图语言,我们对Gremlin Steps进行了分类与总结,接下来将会出一个Gremlin系列文章(初步准备分20~25期来完成这个计划),每一期会针对一类Step进行语法讲解与实例分析。

第1期 Gremlin Steps:

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

本系列文章的Gremlin示例均在HugeGraph图数据库上执行,环境搭建可参考准备Gremlin执行环境

图基本概念

  • 图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()
    [/code]

    // 根据id查询顶点
    g.V('4:Gremlin', '3:TinkerPop')
    [/code]

  2. Step

    E()
    :查询边,一般作为图查询的第1步,后面可以续接的语句种类繁多。

    示例:

    // 查询图中所有的边
    g.E()
    [/code]

    // 根据id查询边
    g.E('S3:TinkerPop>4>>S4:Gremlin')
    [/code]

  3. Step

    id()
    :获取顶点、边的id。

    示例:

    // 查询所有顶点的id
    g.V().id()
    [/code]

    类似的,通过

    g.E().id()
    查询所有边的id。

    注意:Gremlin Step是作用在上一步产生的结果集上,如果上一步的结果是多个元素,那么这里

    id()
    将返回多个元素的id。

  4. Step

    label()
    :获取顶点、边的label。

    示例:

    // 查询所有顶点的label
    g.V().label()
    [/code]

    类似的,通过

    g.E().label()
    查询所有边的label。

  5. Step

    properties()
    :获取顶点、边的属性。

    示例:

    // 查询所有顶点的属性
    g.V().properties()
    [/code]
    // 查询所有顶点的“lang”属性
    // 如果无“lang”属性的顶点将跳过
    g.V().properties('lang')
    [/code]

    类似的,通过

    g.E().properties()
    查询所有边的属性。

    此外

    properties()
    还可以和
    key()
    value()
    搭配使用,以获取属性的名称或值。

    示例

    key()

    // 查询所有顶点的属性名称
    g.V().properties().key()
    [/code]

    示例

    value()

    // 查询所有顶点的属性值
    g.V().properties().value()
    [/code]

  6. Step

    valueMap()
    :获取顶点、边的属性,
    valueMap()
    properties()
    不同的地方是:它们返回的结构不一样,后者将所有的属性扁平化到一个大列表里面,一个元素代表一个属性;前者保持一个顶点或一条边的属性作为一组,每一组由若干属性的键值对组成。

    示例:

    // 查询所有顶点的属性
    g.V().valueMap()
    [/code]

    类似的,通过

    g.E().valueMap()
    查询所有边的属性。

  7. Step

    values()
    :获取顶点、边的属性值。

    示例:

    // 查询所有顶点的属性值
    // 效果等同于:
    // g.V().properties().value()
    g.V().values()
    [/code]

    // 查询所有顶点的“lang”属性
    // 效果等同于:
    // g.V().properties('lang').value()
    g.V().values('lang')
    [/code]

    类似的,通过

    g.E().values()
    查询所有边的属性值。

下一期:深入学习Gremlin(2):边的遍历操作

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: