ope电竞竞猜_ope体育电竞官方网站_ope体育电竞app
ope电竞竞猜

网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞app

admin admin ⋅ 2019-05-20 08:11:32

Gremlin是JanusGraph的查询言语,用于从图中检索数据和更新数据。Gremlin是一种面向途径的言语,它能够简练地表明杂乱的图形遍历和多步操作。Gremlin是一种函数式言语,遍历运算被链接在一起构成相似途径的表达式。例如,“从Hercules,遍历他的父亲,然后他父亲的父亲,并回来祖父的姓名。”

Gremlin是ApacheTinkerPop的一个组件。它独立于JanusGraph开发,并且支撑大多数的图数据库。经过Gremlin查询言语在JanusGraph基础上开发的运用夏凌兮程序,用户能够防止被数据库绑定,由于他们的运用程序能够迁移到支撑Gremlin的其他图数据库。

本节是Gremlin查询言语的扼要概述。有关Gremlin的更多信息,请参阅以下资源:

  • Complete Gremlin Manual:Gremlin的参考手册。
  • Gremlin Console Tutorial:学习怎么有用地运用Gremlin操控台以交互办法遍历和剖析图形。
  • Practical Gremlin Book:图数据库和Gremlin查询言语的入门攻略。
  • Gremlin Recipes:Gremlin的最佳实践和常见遍历形式洪天照李曼的调集。
  • Gremlin Language Drivers:运用不同的编程言语连接到Gremlin服务器,包含Go,JavaScript,.NET/C#,PHP,Python,Ruby,Scala和TypeScript。
  • Gremli网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞appn Language Variants:学习怎么在编程言语中嵌入Gremlin。
  • Gremlin for SQL developers:运用SQL查询数据的办法来学习Gremlin。

1. 遍历介绍

Gremlin查询是一系列从左到右的核算操作/函数。下面经过第3章“入门”中评论的Gods图来展现一个简略的祖父查询的示例。


gremlin g.V().has('name', hercules').out('f奥克网ather').out('father').values('name')==saturn

上面查询的解读:

  1. g:当时图的遍历句柄。
  2. V:图中一切的极点。
  3. has('name','hercules'):过滤出极点name为hercules的极点。
  4. out('father'):从hercule书画山风景区s极点遍历出边为father的边。
  5. out('father'):从hercules的father极点遍历出边为father的边。
  6. name:获取hercules祖父极点的name特点的值。

总归,这些过程构成了相似途径的遍历查询。每个过程都能够分化并显现其成果。在构建更大,更杂乱的查询时,这种构建遍历/查询的办法很有用。

gremlin g吃b==graphtraversalsource[janusgraph[cql:127.0.0.1],standard]gremlin g.V().has(崔熙瑞'name', 'hercules')==v[24]gremlin g.V().has('name', 'hercules').out('father')==v网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞app[16]gremlin g.V().has('name', 'hercules').out('father').out('fa菜多多水培栽培箱ther')==v[20]博伽茹蒙斯gremlin g.V().has('name', 'hercules').out('father').out('father').values('name')==saturn

关于正确性检查,一般能够检查每个回来值的特点值,而不是检查他们的id。

gremlin g.V().has('name', 'hercules').values('name')==herculesgremlin g.V().has('name', 'hercules').out('father').values('name')==jupitergremlin g.V().has('name', 'hercules').out('father唐焯仪').out('father').values('name')==saturn

留意相关的遍历,展现了Hercules的整个父系树分支。供给这种更杂乱的遍历以展现言语的灵活性和可读性。对Gremlin的有用把握为JanusGraph用户供给了快速查询底层图结构遍历的才能。

gremlin g.网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞appV().has('name', 'hercules').repeat(out('father')).emit().valu有你的城市下雨也美丽es('name网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞app')==jupiter==saturn

下面供给了一些mikiplum遍历示例。

gremlin hercules = g.V().has('name', 'hercules').next()==v[1536]gremlin g.V(hercules).out('father', 'mother').label()==god==humangremlin g.V(hercules).out('battled').label()==monster==monster==monstergremlin g.V(hercules).out('battled').valueMap()=={name=nemean}=={name=hydra}=={name=cerberus}

每一步(由分隔表明)是对上一步核算出的目标进行操作的函数。Gremlin言语中有许多步(拜见GremlinSteps)。经过简略地改动过程或着改动过程的次序,能够完成不同的遍历。下面的比如回来一切与Hercules战役相同怪物的人的姓名,并且除掉Hercules自身(即“一起兵士”或许“盟友”)。

鉴于神的图形只要一个战役者(Hercules),另一个战役者(为了举例)被增加到图中,Gremlin展现了怎么将极点和边增加到图形中。

gremlin theseus = graph.addVertex('human')==v[3328]gremlin theseus.property('name', 'theseus')==nullgremlin cerberus = g.宠妃逃宫记V().has('name', 'cerberus').next()==v[2816]gremlin battle = theseus.addEdge('battled', cerberus, 'time', 22)==e[7eo-2kg-iz9-268][3328-battl嫡妻斗争日常ed-2816]gremlin battle.网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞appvalues('time')==22

增加极点时,能够挑选是否指定极点标签。可是增加边时有必要指定边标签。能够在极点和边上设置作为键值对的特点。运用SET或LIST基数界说的特点键,有必要运用addProperty向极点增加此特点。

gremlin g.V(hercules).as('h').out('battled').in('battled').where(neq('h')).values('n胸被摸ame')==theseus

上面的比如有4个链接函数:out,in,except和values(即name是值的简写('na网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞appme'))。每个的函数在下面逐条列出,其间V是极点而U是任何目标,李宇春林丽其间V是U的子集。

  1. out:V-V
  2. in:V-V
  3. except:U-U
  4. values:V-U

将函数链接在一起时,传入类型有必要与传出类型匹配,其间U匹配任何内容。因而,上面的“一起战役/盟友”遍历是正确的。假如奥特曼打不赢小怪兽

留意:本节中介绍的Gremlin概述要点介绍了在Gremlin操控台中Gremlin-Groovy言语完成版别的运用。Gremlin的其他言语驱动和完成也是能够运用的。

2. 遍历迭代网易新闻,过山风-ope电竞竞猜_ope体育电竞官方网站_ope体育电竞app

Gremlin操控台其间的一个特性是它从gremlinprompt主动迭代一切的查询成果。这在REP君顿花园酒店L环境中很好用,并且它将成果作为String类型来展现。当你开端编写Gremlin运用程序时,了解怎么显式迭代遍历非常重要,由于运用程序的遍历不会主动迭代。以下是迭代遍历的一些常用办法:

  • iterate()-预期或许能够疏忽空值。
  • next()-获取一个成果,一定要先经过hasNext()判别。
  • next(intn)-获取第n个成果,一定要先经过hasNext()判别。
  • toList()-获取一切的成果作为一个list,假如没有成果则回来空列表。

下面运用Java代码示例来演示这些概念:

Traversal t = g.V().has(name, pluto); // Define a traversal// Note the traversal is not executed/iterated yetVertex plut易企记o = null;if (t.hasNext()) { // Check if results are available pluto = g.V().has(name, pluto).next(); // Get one result g.V(pluto).drop().iterate(); // Execute a traversal to drop pluto from graph}// Note the traversal can be cloned for reuseTraversal tt = t.asAdmin().clone();if (tt.hasNext()) {System.err.println(plutowasnotdropped!);}ListVert秘卤鲜生ex gods = g.V().hasLabel(god).toList(); // Find all the gods

欢迎扫码重视大众号,更好的沟通

相关新闻

admin

admin

TA太懒了...暂时没有任何简介

精彩新闻