网络运维场景

图数据库GDB可以轻松的对IT、网络运营的海量数据进行建模,将原始关系型数据库中结构化数据转换图数据库中的节点和边,不仅能减少DBA的数据建模工作量,又能够提升查询效率。解决传统解决方案中数据量超过一定量级时不能使用数据库和使用CMDB周期长且不够灵活的问题。

下面示例采用USAir97的机场运输的dataset对具体应用加以说明。

示例示意图

航站枢纽节点连接示意图如下:示意图

示例数据模型

图数据模型抽象以每个机场航运站为节点,航运站间的运输路线为边。其中:

  • 节点中包含航运站名称,航运站坐标位置。

  • 边中包含所连接的航运站,及航运站之间的距离。

代码示例

  • 查看一共有多少点。

    g.V().count()
  • 查看一共有多少边。

    g.E().count()
  • 查看枢纽节点,一共有多少节点连入。

    g.V('118').in().count() //118为"Chicago O'hare Intl"节点

    一共有哪些连入节点。

    g.V('118').in().id()

    返回结果:

    65  //"Portland Intl"
    94  //"General Mitchell Intll"
    95  //"Greater Buffalo Intl"
    8   //"Anchorage Intl"
    ...
  • 查看枢纽节点,一共连了多少节点。

    g.V('118').out().count()

    一共连了哪些节点。

    g.V('118').out().id()

    返回结果:

    201  //"San Francisco Intl"
    221  //"Raleigh-Durham Intll"
    301  //"Tampa Intl"
    232   //"Memphis Intl"
    ...
  • 最优运输路径选择: 从”Wiley Post-Will Rogers Mem” 节点运输货物至 “Shreveport Regional” 的最优路径选择。

    g.V("1").store("x").repeat(out().where(without("x")).aggregate("x")).until(hasId("267")).path()

    返回结果:

    [v[1],v[4],v[47],v[255],v[267]]
    // "Wiley Post-Will Rogers Mem" -> "Fairbanks Intl" -> "Seattle-Tacoma Intl" -> "The William B Hartsfield Atlan" -> "Shreveport Regional"
  • 运输路线统计分析:每次运输一个节点添加运输货物事件记录,查询时可按货物查询运输路线,达到运输路线统计,货物追踪及货物信息统计等。

    g.V('1').property('cargo1', 1)
    g.V().properties('cargo1').valueMap(true)

    返回结果:

    v[1]
    [id:1,key:cargo1,value:1]
    [id:4,key:cargo1,value:2]
    [id:47,key:cargo1,value:3]
  • 货物运输路线跟踪:在货物运输完或运输途中,可以根据图数据库中留下的记号,追踪货物在运输网中的路径。

    g.V().has("cargo1").valueMap(true)

    返回结果:

    [id:1,label:vertex,cargo1:[1]]
    [id:4,label:vertex,cargo1:[2]]
    [id:47,label:vertex,cargo1:[3]]