Gremlin图数据库
文章平均质量分 62
Gremlin是一种图数据库查询语言,用于遍历和操作图形数据结构。
汀白枳墨
这个人很懒,什么也没留下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
学习Gremlin - 合订版
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,亟需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。图由两个元素组成:节点和关系。每个节点代表一个实体(人,地,事物,类别或其他数据),每个关系代表两个节点的关联方式。这种通用结构可以对各种场景进行建模 - 从道路系统到设备网络,到人口的病史或由关系定义的任何其他事物。图数据库(Graph database)并非指存储图片的原创 2023-11-13 17:47:15 · 1553 阅读 · 0 评论 -
学习Gremlin - 24.转换操作map/flatMap
map: 可以接受一个遍历器 Step 或 Lamda 表达式,将遍历器中的元素映射(转换)成另一个类型的某个对象(一对一),以便进行下一步处理;flatMap: 可以接受一个遍历器 Step 或 Lamda 表达式,将遍历器中的元素映射(转换)成另一个类型的某个对象流或迭代器(一对多)。注意:顶点“javeme”其实是有三条边的,但是这里只打印出了一条。注意:这一次就能打印出顶点“javeme”的全部三条边了。Step是一对一的转换,要想获取所有的边可以使用。原创 2023-11-09 00:00:00 · 198 阅读 · 0 评论 -
学习Gremlin - 23.遍历终止terminal
在这里要强调的一点:原生的 Gremlin 语句通常都是用遍历器连接起来的,但其实这些连接的过程并不会执行 Gremlin 语句,只有走到了terminalStep 时才会执行。其实这是 Tinkerpop 的 Gremlin 解析引擎对遍历器对象调用了一个IteratorUtils.asList()方法,又调用了它内部的fill()方法(注意:不是上面讲到的fill()Step)。返回的是一个遍历器(迭代器),每次执行这句话实际上都是获取的迭代器的第一个元素,那如果想获取第二个元素该怎么写呢?原创 2023-11-08 00:00:00 · 177 阅读 · 0 评论 -
学习Gremlin - 22.局部操作local
另外,有一些step默认的操作是针对对象流中的全部对象,但也可以通过参数来改变默认操作,允许针对对象流中的单个对象进行操作,包括count(),max(),mean(),min(),sum(),order(),tail(),limit(),range(),sample(),skip()和dedup()等。很多操作是针对传递过来的对象流中的全部对象进行操作,但也有很多时候需要针对对象流中的单个对象而非对象流中的全部对象进行一些操作。这种对单个对象的局部操作,可以使用local()语句实现。原创 2023-11-07 00:00:00 · 177 阅读 · 0 评论 -
学习Gremlin - 21.遍历栅栏barrier
事实上除了可显示的插入barrier栅栏外,还有不少Step会隐式插入barrier,包括 order(), sample(), dedup(), aggregate(), fold(), count(), sum(), max(), min(), group(), groupCount(), cap()等。Gremlin在路径遍历的时候,可以将栅栏barrier插入到懒加载的遍历流水线中,以使得barrier之前的步骤都执行完成之后再继续往下执行。原创 2023-11-06 00:00:00 · 174 阅读 · 0 评论 -
学习Gremlin - 20.结果存取口袋sack
Gremlin在路径遍历的时候,可以将中间结果存放到一个叫口袋(sack)的结构里面,以备在后续步骤中使用;此外在放入数据到口袋的时候,还可以做一些灵活的操作比如:分裂(split)、合并(merge)等。sack相关step属于Gremlin语言里面的高级操作,在处理较为复杂的任务时可以灵活的实现一些特殊功能。: 利用口袋来存取结果。原创 2023-11-05 00:00:00 · 246 阅读 · 0 评论 -
学习Gremlin - 19.随机过滤与注入
Gremlin允许在遍历器中注入一些默认值或自定义值,比如在分支 Step 中给 else 路径的元素一个默认值,又或者在遍历器过程中人为地加上一些额外的元素。联合使用做随机漫游(从某个顶点出发,随机选一条边,走到边上的邻接点;再以该点为起点,继续随机选择边,走到邻接点…Gremlin支持对遍历器(traversal)上的结果进行采样或者做随机过滤。sampleStep后能接上byStep,能以指定的属性为判断依据进行随机过滤。inject只是在查询过程中添加一些额外的元素,并没有把数据真正地插入到图中。原创 2023-11-04 00:00:00 · 183 阅读 · 0 评论 -
学习Gremlin - 18.模式匹配
Gremlin中的match()语句为图查询提供了一种基于“模式匹配”的方式,以便用更具描述性的方式进行图查询。这些traversal fragments中会定义一些变量,只有满足所有用变量表示的约束的对象才能够通过,并被放到一个Map中,其中map的key为变量名(label),value为顶点、边、路径或者属性。因此,当图的规模比较大且用户不知道满足特定模式的数据规模时,使用match()可以自动进行优化,减小操作规模。语句中可以使用外部的label。原创 2023-11-03 00:00:00 · 238 阅读 · 0 评论 -
学习Gremlin - 17.结果聚集与展开
aggregate(): 聚集路径中指定步骤的所有结果,通过aggregate(label)对任意步骤打上标签,在此之前的步骤的结果均会被收集到此标签所代表的集合中(但并不会影响路径的游走),可配合by及cap一起使用,通过cap(label)来获取该结果集合,此外还可通过select(label)或without(label)等其它方式读取。Gremlin在路径游走的时候,可以将某一步的所有结果收集到一个集合里面(我们称之为结果聚集),以备在后续步骤中使用;此外还可在需要的时候将聚集的结果展开。原创 2023-11-02 00:00:00 · 329 阅读 · 0 评论 -
学习Gremlin - 16.合并
这次由于“supports”放在了“implements”的前面,所以返回了“supports”出边和邻接点。JanusGraph这三类边都是存在的,按照优先级,返回了“implements”出边和邻接点。结果中的后面四个顶点因为没有出“knows”顶点,所以在第一步返回了自身后就停止了。原创 2023-11-01 00:00:00 · 253 阅读 · 0 评论 -
学习Gremlin - 15.分支
与option配合使用,choose(traversal).option(value1, traversal1).option(…:根据对象通过traversal的结果决定后续操作,如果结果是value1,则该对象继续traversal1,以此类推。单独使用,choose(predicate, true-traversal, false-traversal):根据predicate判断,当前对象满足时,继续true-traversal,否则继续false-traversal。原创 2023-10-31 00:00:00 · 130 阅读 · 1 评论 -
学习Gremlin - 14.路径选取与过滤
Gremlin支持从走过的路径里选取部分数据作为结果,并且可以在选取时进行条件过滤。原创 2023-10-30 00:00:00 · 425 阅读 · 1 评论 -
学习Gremlin - 13.数学运算
不同于常见的函数组合和嵌套形式,提供了一种易于读取的基于字符串的数学处理器。在Gremlin中有一个专门负责科学计算功能的step。中首次引用变量的顺序应用。原创 2023-10-29 00:00:00 · 201 阅读 · 1 评论 -
学习Gremlin - 12.统计运算
Gremlin可以在Number类型的流(遍历器)上做简单的统计运算,包括计算总和、最大值、最小值、均值。这四种Step只能作用在Number类型的流上,在java里就是继承自。原创 2023-10-29 00:00:00 · 215 阅读 · 1 评论 -
学习Gremlin - 11.逻辑运算
Gremlin支持在遍历器上加上逻辑运算进行过滤,只有满足该逻辑条件的元素才会进入下一个遍历器中。目标:获取所有最多只有一条“created”边并且年龄不等于28的“person”顶点。当没有任何一个顶点的属性“age”为28时,输出为空。这四种逻辑运算Step除了像一般的Step写法以外,Step可以接受一些过滤条件。是左开右开区间(a,b)中以中缀符的形式出现。原创 2023-10-28 09:00:00 · 228 阅读 · 1 评论 -
学习Gremlin - 10.条件和过滤
在对图进行遍历分析时,经常需要对满足一定条件的对象进行过滤。where()就是用来过滤遍历过程中当前阶段的对象。另一方面,predicate就是过滤时使用的判断条件,包括关系运算和区间判断等,只有满足判断条件的对象才能通过进入下一轮或者作为结果。where()常与select()或者match()配合使用,也可以单独使用。在众多的Gremlin steps中,有一大类是。的基础,较为抽象,而更加具体的。可以为某一阶段的对象添加标签,可以保证满足某种模式的对象通过。则可以通过标签获取对象。原创 2023-10-27 09:00:00 · 398 阅读 · 1 评论 -
学习Gremlin - 9.数据分组与去重
数据去重是指:去除结果集中相同的元素,或者去除在某个维度上具有相同点的数据,比如根据年龄选出一些代表,每个年龄最多只能有一个人。数据分组是指:从某个维度上对拥有相同点的数据进行分组,比如根据年龄分组、根据出生省份分组等。Gremlin支持对数据进行分组和去重。原创 2023-10-26 09:00:00 · 558 阅读 · 0 评论 -
学习Gremlin - 8.查询结果排序
by()step不是一个真正的step,而是一个“step modulator”,与此类似的还有as()和option()step。通过by()step可以为某些step添加traversal、function、comparator等,通常的使用方式是step().by()…by(),某些step只能添加一个by(),而有一些可以添加任意数量的by()step。) step 但是 by() 传递的仅是一个排序方式的参数时,也必须保证遍历器(traverser)中的元素是可排序的。排序方式可以通过单独的。原创 2023-10-25 09:00:00 · 267 阅读 · 1 评论 -
学习Gremlin - 6.查询路径path
path()返回当前遍历过的所有路径。有时需要对路径进行过滤,只选择没有环路的路径或者选择包含环路的路径,Gremlin针对这种需求提供了两种过滤路径的step:simplePath()和cyclicPath()。在使用Gremlin对图进行分析时,关注点有时并不仅仅在最终到达的顶点、边或者属性上,通过什么样的路径到达最终的顶点、边和属性同样重要。此时可以借助path()来获取经过的路径信息。如果想要同时获得经过的边的信息,可以用。路径分为两种:有环路径和无环路径。原创 2023-10-23 09:00:00 · 570 阅读 · 0 评论 -
学习Gremlin - 7.循环操作
注意3:until()放在repeat()之前或之后的顺序是会影响逻辑的,放前面表示先判断再执行,放后面表示先执行后判断。注意:emit()放在repeat()之前或之后的顺序是会影响结果的,放前面表示先收集再执行,放后面表示先执行后收集。注意2:until()与 times()是互斥的,两个语句无法同时存在于同一个循环中。搭配使用时,是“或”的关系而不是“与”的关系,满足两者间任意一个即可。搭配使用时,是“或”的关系而不是“与”的关系,满足两者间任意一个即可。原创 2023-10-24 09:00:00 · 463 阅读 · 2 评论 -
学习Gremlin - 5.图查询返回结果数限制
/不加限制地查询所有类型为“人person”的顶点 g . V() . hasLabel('person') . range(0 , - 1)//查询类型为“人person”的顶点中的第2个到第5个 g . V() . hasLabel('person') . range(2 , 5)//查询类型为“人person”的顶点中的第5个到最后一个 g . V() . hasLabel('person') . range(5 , - 1)原创 2023-10-22 09:00:00 · 281 阅读 · 1 评论 -
学习Gremlin - 4.Has条件过滤
在众多Gremlin的语句中,有一大类是filter类型,顾名思义,就是对输入的对象进行条件判断,只有满足过滤条件的对象才可以通过filter进入下一步。has语句是filter类型语句的代表,能够以顶点和边的属性作为过滤条件,决定哪些对象可以通过。在JanusGraph中,按property的值查询之前,应该对property建立索引,否则将无法查到结果并引发异常。原创 2023-10-21 09:00:00 · 322 阅读 · 1 评论 -
学习Gremlin - 3.边的遍历操作
目前讲解过的Gremlin Steps中,顶点的id可通过g.V()来获取,也可通过即将讲解的has()来获取(根据属性查询顶点)。一般情况下,outE().otherV()等价于out(),inE().otherV()等价于in()注意:bothV()会把源顶点也一起返回,因此只要源顶点有多少条出边,结果集中就会出现多少次源顶点。一般情况下,bothE().otherV()等价于both()一般情况下,outE().inV()等价于out()一般情况下,inE().outV()等价于in()原创 2023-10-20 11:20:26 · 346 阅读 · 1 评论 -
学习Gremlin - 2.图基本概念与操作
此外 properties()还可以和 key()、value()搭配使用,以获取属性的名称或值。属性Property:顶点或边可以包含属性,比如:人的姓名、人的年龄、转账的时间。类似的,通过g.E().properties()查询所有边的属性。比如:同学及朋友关系图、银行转账图等。类似的,通过g.E().label()查询所有边的label。类似的,通过g.E().valueMap()查询所有边的属性。类似的,通过g.E().values()查询所有边的属性值。比如:朋友关系、转账动作等。原创 2023-10-20 11:10:06 · 374 阅读 · 0 评论 -
学习Gremlin - 1.前言
随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,传统数据库很难处理关系运算。大数据行业需要处理的数据之间的关系随数据量呈几何级数增长,亟需一种支持海量复杂数据关系运算的数据库,图数据库应运而生。节点和关系。每个节点代表一个实体(人,地,事物,类别或其他数据),每个关系代表两个节点的关联方式。这种通用结构可以对各种场景进行建模 - 从道路系统到设备网络,到人口的病史或由关系定义的任何其他事物。图数据库(Graph database)原创 2023-10-19 15:13:57 · 614 阅读 · 1 评论
分享