在传统的解决方案中,当数据量超过一定量级时通常不能直接使用传统数据库,而需采用更为专业化的CMDB。但传统CMBD的弊端也显而易见周期长,不够灵活,当随着数据量和关系复杂度的提高时,会面临复杂臃肿的设计和处理效率下降的问题,这样带来的工作量和维护成本也会巨大无比。

图数据库则可以轻松的对IT、网络运营的海量数据进行建模,将原始关系型数据库中结构化数据转换图数据库中的节点和边。这样可以解放DBA繁杂的数据建模工作量,同时又能够将查询效率达到量级的提升。因此,图数据库在IT、网络运营的海量数据场景将有着无限的发展前景。

示例

下面示例采用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]]