ca88官方会员登录图遍历语言

Gremlin简介

Gremlin是Apache TinkerPop
框架下的图遍历语言。Gremlin是壹种函数式数据流语言,能够使得用户使用简单的措施发挥复杂的本性图(property
graph)的遍历或询问。每种Gremlin遍历由一种种步骤(恐怕存在嵌套)组成,每一步都在数据流(data
stream)上举办三个原子操作。

Gremlin包罗三个为主的操作:

  • map-step
    对数码流中的靶子举办转移;
  • filter-step
    对数据流中的靶子就行过滤;
  • sideEffect-step
    对数据流举办总括总计;

以下是Gremlin在一些场景中的具体运用:

  • 一.查找Gremlin朋友的情侣

    g.V().has("name","gremlin").
      out("knows").
      out("knows").
      values("name")
    
  • 2.搜求这么些由多个对象一道创建的品种

    g.V().match(
      as("a").out("knows").as("b"),
      as("a").out("created").as("c"),
      as("b").out("created").as("c"),
      as("c").in("created").count().is(2)).
    select("c").by("name")
    
  • 三.交由Gremlin的具备上司,直至总主管

    g.V().has("name","gremlin").
      repeat(in("manages")).
    until(has("title","ceo")).
      path().by("name")
    
  • 4.获得Gremlin同盟者的职务任职资格分布

    g.V().has("name","gremlin").as("a").
      out("created").in("created").
    where(neq("a")).
      groupCount().by("title")
    
  • 5.获取Gremlin购买产品的有关制品列表并排序

    g.V().has("name","gremlin").
      out("bought").aggregate("stash").
      in("bought").out("bought").
    where(not(within("stash"))).
      groupCount().order(local).by(values,decr)
    
  • 陆.获得排行前十的中坚人物

    g.V().hasLabel("person").
      pageRank().
    by("friendRank").
    by(outE("knows")).
      order().by("friendRank",decr).
      limit(10)
    

Gremlin简介

Gremlin是Apache TinkerPop
框架下的图遍历语言。Gremlin是壹种函数式数据流语言,可以使得用户使用轻巧的点子表明复杂的性质图(property
graph)的遍历或询问。种种Gremlin遍历由一多级步骤(大概存在嵌套)组成,每一步都在数据流(data
stream)上实施1个原子操作。

Gremlin包涵多少个主旨的操作:

  • map-step
    对数据流中的靶子开展转移;
  • filter-step
    对数码流中的靶子就行过滤;
  • sideEffect-step
    对数据流实行测算总括;

以下是Gremlin在部分现象中的具体行使:

  • 一.查找Gremlin朋友的仇人

    g.V().has("name","gremlin").
      out("knows").
      out("knows").
      values("name")
    
  • 二.找寻那么些由四个朋友共同开创的等级次序

    g.V().match(
      as("a").out("knows").as("b"),
      as("a").out("created").as("c"),
      as("b").out("created").as("c"),
      as("c").in("created").count().is(2)).
    select("c").by("name")
    
  • 三.付出Gremlin的享有上司,直至总首席推行官

    g.V().has("name","gremlin").
      repeat(in("manages")).
    until(has("title","ceo")).
      path().by("name")
    
  • 4.赢得Gremlin同盟者的职务名称分布

    g.V().has("name","gremlin").as("a").
      out("created").in("created").
    where(neq("a")).
      groupCount().by("title")
    
  • 5.到手Gremlin购买产品的相关制品列表并排序

    g.V().has("name","gremlin").
      out("bought").aggregate("stash").
      in("bought").out("bought").
    where(not(within("stash"))).
      groupCount().order(local).by(values,decr)
    
  • 六.获得排名前十的主干人物

    g.V().hasLabel("person").
      pageRank().
    by("friendRank").
    by(outE("knows")).
      order().by("friendRank",decr).
      limit(10)
    

OLTP 和 OLAP遍历

  • 三回编写,随地运转
    Gremlin遵循“三回编写,四处运转”的设计法学。那表示不但具备的TinkerPop启用的图形系统都能举行Gremlin遍历,而且种种Gremlin遍历都得以被评估为实时数据库查询或批管理查询。(前者被叫作在线交易流程(OLTP),后者被称为在线分析流程(OLAP))。

  • ca88官方会员登录,谐和两种图遍历
    那种普及性是由Gremlin遍历机实现的。那种遍及式、基于图形的虚拟机理解哪些协和多机器图遍历的实践。好处是,用户不供给上学数据库查询语言和域特定的BigData分析语言(比方SparkDSL,MapReduce等)。Gremlin是创设基于图的应用程序所必需的,其他全体都提交Gremlin遍历机管理。
    ca88官方会员登录 1

OLTP 和 OLAP遍历

  • 一遍编写,各处运转
    Gremlin遵循“一次编写,随地运营”的筹算法学。那代表不但抱有的TinkerPop启用的图形系统都能实行Gremlin遍历,而且各种Gremlin遍历都得以被评估为实时数据库查询或批处理查询。(前者被称呼在线交易流程(OLTP),后者被称之为在线分析流程(OLAP))。

  • 和谐三种图遍历
    那种广泛性是由Gremlin遍历机达成的。那种布满式、基于图形的虚拟机精晓怎么样和睦多机器图遍历的推行。好处是,用户不须要学习数据库查询语言和域特定的BigData分析语言(比方斯ParkerDSL,MapReduce等)。Gremlin是营造基于图的应用程序所至关重要的,别的全数都交由Gremlin遍历机管理。
    ca88官方会员登录 2

命令式和申明式遍历

Gremlin遍历能够以命令式(程序式)方式,表明性(描述性)格局编写,也能够分包命令性和注解性的交集情势编写。

  • 命令式编写情势
    赢得Gremlin合营者的上司名字遍及:

    g.V().has("name","gremlin").as("a").
      out("created").in("created").
    where(neq("a")).
      in("manages").
      groupCount().by("name")
    

    多个命令式的Gremlin遍历告诉运行器如何推行遍历中的每一步;然后,遍历器分化到持有的“Gremlin”的合营方(去除Gremlin自身);下一步,遍历器走到“Gremlin”协小编的上边(managers),最后依附下面的名字实行总结分发。

就此是命令式的Gremlin遍历,正是它总来讲之地、程序化地告诉遍历器“去那里,然后去那边”。

  • 证明式编写形式
    以下使用注明式编写格局贯彻了千篇一律的结果:

    g.V().match(
      as("a").has("name","gremlin"),
      as("a").out("created").as("b"),
      as("b").in("created").as("c"),
      as("c").in("manages").as("d"),
    where("a",neq("c"))).
      select("d").
      groupCount().by("name")
    

    申明式的Gremlin遍历并不能告诉遍历器实践它们的步调的1壹,而是允许每一个遍历器从3个(可能嵌套的)情势的会面中挑选2个情势来实行。

可是,表明遍历拥有额外的补益,它不光使用了编写翻译时查询布置器(如命令式遍历),而且依然1个运维时查询陈设器,依据各样格局的野史总结消息选用下二个实施哪个遍历方式

  • 造福这个倾向于减弱/过滤大好些个数码的形式。

用户能够选取上述提议的法子编写自个儿的遍历语句。不管怎么着,用户的遍历语句都会依据实际的实施引擎和遍历计谋traversal
strategies
被重写。Gremlin为用户提供灵活性表明本人的询问的;图系统也针对现实启用TinkerPop的数据系统实行有效地评估图遍历提供了灵活性。

命令式和注明式遍历

Gremlin遍历能够以命令式(程序式)情势,申明性(描述性)方式编写,也足以涵盖命令性和注解性的老婆当军方式编写。

  • 命令式编写情势
    收获Gremlin同盟者的顶头上司名字布满:

    g.V().has("name","gremlin").as("a").
      out("created").in("created").
    where(neq("a")).
      in("manages").
      groupCount().by("name")
    

    二个命令式的Gremlin遍历告诉运维器怎样奉行遍历中的每一步;然后,遍历器分化到具备的“Gremlin”的同盟方(去除Gremlin自个儿);下一步,遍历器走到“Gremlin”同盟者的上级(managers),最后依据上边的名字进行计算分发。

由此是命令式的Gremlin遍历,正是它综上说述地、程序化地告知遍历器“去那里,然后去那边”。

  • 注解式编写格局
    以下使用注脚式编写格局实现了平等的结果:

    g.V().match(
      as("a").has("name","gremlin"),
      as("a").out("created").as("b"),
      as("b").in("created").as("c"),
      as("c").in("manages").as("d"),
    where("a",neq("c"))).
      select("d").
      groupCount().by("name")
    

    表明式的Gremlin遍历并不能够告诉遍历器推行它们的手续的相继,而是允许各个遍历器从三个(可能嵌套的)情势的集聚中选择二个格局来执行。

可是,注明遍历拥有额外的补益,它不但使用了编写翻译时查询陈设器(如命令式遍历),而且依然1个运作时查询计划器,依照各种格局的野史计算音讯接纳下一个实行哪个遍历方式

  • 方便人民群众那些倾向于收缩/过滤大很多数码的格局。

用户能够挑选上述建议的办法编写自身的遍历语句。不管怎么着,用户的遍历语句都会基于具体的施行引擎和遍历攻略traversal
strategies
被重写。Gremlin为用户提供灵活性表达自身的查询的;图系统也针对实际启用TinkerPop的数据系统实行中用地评估图遍历提供了灵活性。

无缝嵌入主语言

  • 联合主开采语言和图查询语言
    经文数据库查询语言(如SQL)被感觉与终极在生育意况中使用的编制程序语言大相径庭。由此,精华数据库须求开辟职员既要编写主要编辑程语言,还要编写数据库相应的询问语言。Gremlin统一了那些划分,因为遍历能够用帮助功效结合和嵌套(首要编制程序语言都支持)的任何编制程序语言编写。由此,用户的Gremlin遍历能够动用应用程序语言(主语言,Host
    language)编写,并受益于主语言及其工具(比如类型检查,语法高亮,点到位等)所提供的长处。目前留存各类Gremlin语言变体,包涵:Gremlin-Java,Gremlin-Groovy,Gremlin-Python,Gremlin-Scala等。

  • 演示程序
    相比较之下三种方法,高低立判:

    public class GremlinTinkerPopExample {
      public void run(String name, String property) {
    
    Graph graph = GraphFactory.open(...);
    GraphTraversalSource g = graph.traversal();
    
    double avg = g.V().has("name",name).
                   out("knows").out("created").
                   values(property).mean().next();
    
    System.out.println("Average rating: " + avg);
      }
    }
    

public class SqlJdbcExample {
  public void run(String name, String property) {

    Connection connection = DriverManager.getConnection(...)
    Statement statement = connection.createStatement();
    ResultSet result = statement.executeQuery(
      "SELECT AVG(pr." + property + ") as AVERAGE FROM PERSONS p1" +
        "INNER JOIN KNOWS k ON k.person1 = p1.id " +
        "INNER JOIN PERSONS p2 ON p2.id = k.person2 " +
        "INNER JOIN CREATED c ON c.person = p2.id " +
        "INNER JOIN PROJECTS pr ON pr.id = c.project " +
          "WHERE p.name = '" + name + "');

    System.out.println("Average rating: " + result.next().getDouble("AVERAGE")
  }
}

无缝嵌入主语言

  • 统一主开采语言和图查询语言
    特出数据库查询语言(如SQL)被感到与最终在生养条件中央银行使的编制程序语言差之千里。因而,美貌数据库须求开采职员既要编写小编制程序语言,还要编写数据库相应的查询语言。Gremlin统一了这几个划分,因为遍历能够用帮助功能结合和嵌套(主要编制程序语言都帮忙)的任何编制程序语言编写。由此,用户的Gremlin遍历可以运用应用程序语言(主语言,Host
    language)编写,并收益于主语言及其工具(举例类型检查,语法高亮,点成就等)所提供的帮助和益处。最近存在各样Gremlin语言变体,包蕴:Gremlin-Java,Gremlin-Groovy,Gremlin-Python,Gremlin-Scala等。

  • 演示程序
    比较之下二种格局,高低立判:

    public class GremlinTinkerPopExample {
      public void run(String name, String property) {
    
    Graph graph = GraphFactory.open(...);
    GraphTraversalSource g = graph.traversal();
    
    double avg = g.V().has("name",name).
                   out("knows").out("created").
                   values(property).mean().next();
    
    System.out.println("Average rating: " + avg);
      }
    }
    

public class SqlJdbcExample {
  public void run(String name, String property) {

    Connection connection = DriverManager.getConnection(...)
    Statement statement = connection.createStatement();
    ResultSet result = statement.executeQuery(
      "SELECT AVG(pr." + property + ") as AVERAGE FROM PERSONS p1" +
        "INNER JOIN KNOWS k ON k.person1 = p1.id " +
        "INNER JOIN PERSONS p2 ON p2.id = k.person2 " +
        "INNER JOIN CREATED c ON c.person = p2.id " +
        "INNER JOIN PROJECTS pr ON pr.id = c.project " +
          "WHERE p.name = '" + name + "');

    System.out.println("Average rating: " + result.next().getDouble("AVERAGE")
  }
}

参考资料

The Gremlin Graph Traversal Machine and
Language

参考资料

The Gremlin Graph Traversal Machine and
Language

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图