标签: gremlin

通过Gremlin在大图中的节点/边数?

通过Gremlin计算大图中节点/边数的最简单,最有效的方法是什么?我发现最好的是使用V迭代器:

gremlin> g.V.gather{it.size()}
Run Code Online (Sandbox Code Playgroud)

但是,根据V文档,这对于大型图表来说不是一个可行的选择:

图的顶点迭代器.利用它来迭代图中的所有顶点.除非与键索引查找结合使用,否则请小心使用大型图形.

gremlin

8
推荐指数
1
解决办法
5762
查看次数

如何使用gremlin在两个顶点之间创建双向边?

使用gremlin在两个顶点之间创建双向边的最佳方法是什么.是否有一个直接命令添加边缘或者我们应该添加两个边缘,如顶点X - >顶点Y和顶点Y - >顶点X?

graph gremlin

8
推荐指数
1
解决办法
2054
查看次数

RDF可以使用边缘属性为带标签的属性图建模吗?

我想像以下那样建立合作伙伴关系模型,我以标签属性图的格式表示。

在此处输入图片说明

我想使用RDF语言来表达上面的图形,特别是我想了解是否可以表达“ loves”边缘的标签(这是文章/字母的URI)。

我是RDF的新手,我知道RDF可以轻松表示LPG中的节点属性,但是可以方便地表示边缘属性吗?

这个问题的背景更多:我想使用RDF(而不是Gremlin)的原因是,从长远来看,我想添加一些推理功能。

进一步增加的问题:如果我们选择一个RDF模型来用简单的英语表示上述LPG,我想用SPARQL查询来回答以下问题:

  1. 鲍勃爱上任何一个人吗?
  2. 如果是这样,他爱谁?为什么?

查询SPARQL语句有多复杂loveletters.com/123

rdf graph-databases gremlin amazon-neptune

8
推荐指数
1
解决办法
398
查看次数

Tinkerpop3连接到远程TitanDB服务器

我正在尝试使用Java中的Tinkerpop3作为客户端从已经运行的TitanDB服务器获取Graph对象(我不想创建服务器).

换句话说,我正在尝试实现这样的功能:public Graph obtainGraph(String serverIp,String graphName);

我试图像这样做: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

但据我了解,TitanFactory.open()启动服务器,我不想这样做 - 我只想连接到现有的服务器.

文档以及Internet中的大多数材料使用内存中的图表作为示例,我找不到一个,它显示了如何:

  • 创建新图并将其保存在远程服务器上

  • 从远程服务器检索现有图

  • 更新这样的远程Graph,所以在添加/删除边缘后提交更改

  • 删除整个图表

我不想通过Gremlin语言(字符串)来做上述事情,而是通过Java API(TinkerpopBlueprins).这个人正在接近我需要的东西: 在Java中将顶点添加到TitanDB Graph 但是,他的方法已经将Graph作为参数.

我在Internet的很多地方都看到过,GraphFactory.open()获取了属性文件的路径,但是我还没有看到这种文件内容的例子,尤其是TitanDB的相关数据,所以我更喜欢使用Configuration对象.

图形图形= GraphFactory.open(new BaseConfiguration())

说,没有gremlin.graph属性.

配置配置= new BaseConfiguration(); configuration.setProperty("gremlin.graph","titan");

图形图形= GraphFactory.open(配置);

说GraphFactory无法找到[titan] - 确保jar在类路径中

是否有任何静态类型的构建器,其中包含枚举和常量,而不是Map,它将告诉我,我必须提供哪些属性以及它们的类型是什么?是否有任何开源项目,使用Tinkerpop3作为客户端连接到远程TitanDB服务器,我可以用作例子吗?

我希望看到完整的工作示例,而不是内存与外部配置.

java gremlin titan tinkerpop-blueprint tinkerpop3

7
推荐指数
1
解决办法
1808
查看次数

如何使用Gremlin/Titan/TinkerPop3更新特定的边缘属性?

目标

我有一个足够简单的任务来完成:设置特定边缘属性的权重.以此场景为例:

示例图结构

我想做的是更新值weight.

其他要求

  • 如果边缘不存在,则应创建它.
  • 在两个节点之间可能最多只存在相同类型的一个边缘(即,typeJoey和Pizza之间不能存在多个"吃" 的"吃"的边缘.
  • 该任务应该使用TitanJava API(包括Gremlin作为TinkerPop 3的一部分)来解决.

我知道的

我有以下信息:

  • 顶点标记为"用户"
  • 边缘标签 votes_for
  • edge属性的值type(在这种情况下,"吃")
  • name标记为"meal"的顶点的属性值(在本例中为"pizza"),因此也标记为Vertex.

我的想法

我想我需要做类似以下的事情:

  1. 从Joey顶点开始
  2. 找到标记votes_fortype"吃"的所有外围边缘(应该最多1个)和标记为"吃饭"的具有name"披萨" 的外出顶点.
  3. 更新weight边缘的值.

这就是我在代码中乱搞的东西:

//vertex is Joey in this case
g.V(vertex.id())
    .outE("votes_for")
    .has("type", "eat")
    //... how do I filter by .outV so that I can check for "pizza"?
    .property(Cardinality.single, "weight", 0.99);
    //... what do I …
Run Code Online (Sandbox Code Playgroud)

gremlin titan tinkerpop3

7
推荐指数
2
解决办法
6462
查看次数

将自然英语翻译成 Gremlin 图遍历语言

我正在研究如何将用户的简单英语输入翻译成图遍历语言,尤其是 Gremlin。但是,我找不到与此相关的任何研究论文或源代码。有人可以给我提供一些研究论文或开源代码来帮助我获得一些线索吗?

我想做的一个例子:

用户输入:

显示当前超过3次锁定超时涉及的表

翻译成:

filter(hasLabel('Table').in('反对').hasLabel('Column').count().is(gt(3))

python graph-traversal gremlin nlp-question-answering

7
推荐指数
0
解决办法
431
查看次数

Cosmos db graph与Azure Sql Server - 性能和成本

想象一下社交网络应用程序.用户关注其他用户和用户拍照.照片上有其他用户的标签.

我正在尝试为该应用程序获得有效的Cosmos数据库实现.我提供了SQL Server版本以及基准测试.

这是图表: 在此输入图像描述

这是它的表格版本:

在此输入图像描述

这是Gremlin查询:

g.V('c39f435b-350e-4d08-a7b6-dfcadbe4e9c5')
.out('follows').as('name')
.out('took').order(local).by('postedAt', decr).as('id', 'postedAt')
.select('id', 'name', 'postedAt').by(id).by('name').by('postedAt')
.limit(10)
Run Code Online (Sandbox Code Playgroud)

这是等效的SQL查询(实际上是linq):

Follows
.Where(f => f.FollowerId == "c39f435b-350e-4d08-a7b6-dfcadbe4e9c5")
.Select(f => f.Followees)
.SelectMany(f => f.Photos)
.OrderByDescending(f => f.PostedAt)
.Select(f => new { f.User.Name, f.Id, f.PostedAt})
.Take(10)
Run Code Online (Sandbox Code Playgroud)

该用户跟随136个用户,他们共同拍摄了257张照片.

SQL Server和Cosmos db都位于West Europe Azure位置.我在法国.我在Linpad上做了一些测试.

  • Gremlin查询运行时间超过1.20秒,消耗约330 RU.仅供参考,400RU/s的费用为20美元/月.
  • SQL查询在70毫秒内运行.db是10 DTU(S0的1个实例).因此它的成本为12.65eur /月

如何使用cosmos db更快更便宜地获取Feed?

注意:为了让RU充电,我正在使用Microsoft.Azure.Graph.但我也可以使用Gremlin.Net并得到类似的结果.

azure graph-databases gremlin azure-cosmosdb

7
推荐指数
1
解决办法
2301
查看次数

CosmosDB图:"upsert"查询模式

我是Gremlin查询语言的新手.我必须在Cosmos DB图表上插入数据(使用Gremlin.Net包),无论顶点(或边缘)是否已存在于图形中.如果数据存在,我只需要更新属性.我想用这种模式:

g.V().hasLabel('event').has('id','1').tryNext().orElseGet {g.addV('event').has('id','1')}
Run Code Online (Sandbox Code Playgroud)

但Gremlin.Net/Cosmos DB图API不支持它.有没有办法在单个查询中进行一种upsert查询?

提前致谢.

gremlin azure-cosmosdb

7
推荐指数
1
解决办法
1696
查看次数

查找与其他人购买相同游戏的人

我正在使用 Amazon Neptune 创建和查询一个简单的图形数据库。我目前正在 AWS Jupyter Notebook 中运行我的代码,但最终会将代码移至 Python (gremlin_python)。正如您可能猜到的那样,我对 Gremlin 和一般图形数据库很陌生。

我有以下数据

g.addV('person').property(id, 'john')
 .addV('person').property(id, 'jim')
 .addV('person').property(id, 'pam')
 .addV('game').property(id, 'G1')
 .addV('game').property(id, 'G2')
 .addV('game').property(id, 'G3').iterate() 

g.V('john').as('p').V('G1').addE('bought').from('p').iterate()
g.V('john').as('p').V('G2').addE('bought').from('p').iterate()
g.V('john').as('p').V('G3').addE('bought').from('p').iterate()

g.V('jim').as('p').V('G1').addE('bought').from('p').iterate()
g.V('jim').as('p').V('G2').addE('bought').from('p').iterate()

g.V('pam').as('p').V('G1').addE('bought').from('p').iterate()
Run Code Online (Sandbox Code Playgroud)

数据库中有 3 个人和 3 个游戏。我的目标是,给定一个人,告诉我哪些人购买了与他们相同的游戏,哪些游戏是那些

查看示例代码(主要来自https://tinkerpop.apache.org/docs/current/recipes/#recommendation)后,我有以下代码尝试查找由以下用户购买的游戏

g.V('john').as('target')   Target person we are interested in comparing against
.out('bought').aggregate('target_games') // Games bought by target
.in('bought').where(P.neq('target')).dedup() // Persons who bought same games as target (excluding target and without duplicates)
.group().by().by(out("bought").where(P.within("target_games")).count()) // Find persons, group by number of co owned games
.unfold().order().by(values, …
Run Code Online (Sandbox Code Playgroud)

python-3.x gremlin amazon-neptune

7
推荐指数
1
解决办法
199
查看次数

Gremlin图遍历使用先前的边属性值来过滤后边

在图遍历中,我只想考虑具有属性的边,该边等于遍历中前一步中访问的边之一的属性.

我找到了http://tinkerpop.apache.org/docs/current/recipes/#traversal-induced-values但这似乎只适用于单个对象,在我的情况下,我需要在遍历时更改值.例如,从具有出站边缘(E1,E2,E3 ......)的V1开始,我想要将E1遍历到V2,然后沿着V2的任何边缘遍历,其中edge.property(x)== E1.property(x ),并对V1(E2,E3,...)中的所有边做同样的事情

我找不到任何支持在Gremlin中执行此操作的文档,是否可能?

graph-traversal gremlin

6
推荐指数
1
解决办法
1771
查看次数