标签: gremlin

如何在Gremlin中更新具有相同属性的几个顶点

我有一组具有相同属性'TYPE'的顶点.如何为所有给定的顶点集更新此属性.

gremlin

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

在Titan(Cassandra)中已存在的顶点属性上创建索引?

我正在使用Titan Server(Cassandra)v 0.3.1.我想在我已经开始使用的顶点键/属性上创建索引.然而,在他们的文档中,Titan解释说:

要按键索引顶点,必须在首次在顶点属性中使用键之前创建相应的键索引.

如果我尝试在已存在的字段上创建索引,我会看到预期的错误:

gremlin> g.createKeyIndex("my_key",Vertex.class)
Cannot add an index to an already existing property key: my_key
Run Code Online (Sandbox Code Playgroud)

但是,即使我尝试通过删除所有顶点和边缘来清除图形,我也会看到同样的错误:

gremlin> g.E.remove()
==>null
gremlin> g.V.remove()
==>null
gremlin> g.createKeyIndex("my_key",Vertex.class)
Cannot add an index to an already existing property key: my_key
Run Code Online (Sandbox Code Playgroud)

因此,my_key即使在删除所有图形元素之后,似乎仍然存在于底层数据存储中.这与文档一致(即使元素已被删除,属性已经"首次使用"),但似乎值得一试.

我的下一步将是重新创建一个新的Cassandra数据存储,但我想知道是否有更好的选择.

在已经在Titan中使用的字段上创建索引的最简单方法是什么?

gremlin titan

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

Titan在索引键上的查找速度非常慢?

使用Titan w/Cassandra v 0.3.1,我创建了一个顶点键索引,createKeyIndexTitan文档中所述.

gremlin> g.createKeyIndex("my_key", Vertex.class)
==>null
Run Code Online (Sandbox Code Playgroud)

我现在在图中有appx 50k节点和186k边缘,我发现使用的查找之间存在显着的性能差异my_key.此查询大约需要5秒钟才能运行:

gremlin> g.V.has("my_key", "abc")
==>v[12345]
Run Code Online (Sandbox Code Playgroud)

而使用索引ID的时间不到1秒:

gremlin> g.v(12345)
==>v[12345]
Run Code Online (Sandbox Code Playgroud)

my_key没有一个独特的约束(我不想),但我想知道是什么导致这种性能差异.如何提高非唯一索引顶点键的查找性能?

gremlin titan

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

在Tinkerpop 3.1中找到两个节点之间最短路径的最佳方法

我知道这次被问了几次,但我没有找到关于Tinkerpop(3.1)的最新版本的任何参考,其中包含许多我们可以在遍历中使用的新的有用函数.

假设我必须找到节点3和节点4之间最短路径.这种遍历是否有声音?

g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().limit(1)
Run Code Online (Sandbox Code Playgroud)

这里我假设当我循环执行BFS搜索时(因此,第一个结果是最短路径),因为这似乎就是loop()函数的情况.

另外,有没有办法在步骤中包含先前绑定的变量(通过使用as步骤)until?更确切地说,我试图在遍历期间选择两个节点,然后找到它们之间的最短路径,例如,

g.V().match(
__as('e0').out('Feedbacks').as('e1'),
__as('e0').repeat(out('Meets')).until(<I reach e1>).path().<get_length>.as('len')
).select('e0', 'e1', 'len')
Run Code Online (Sandbox Code Playgroud)

最后,从前面的遍历中可以看出,我不清楚如何获得最短路径的长度.使用类似的东西

g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().size()
Run Code Online (Sandbox Code Playgroud)

返回结果的大小(返回的行数),而

g.V(3).repeat(out()).until(id().is(4).and().simplePath()).path().by(__size())
Run Code Online (Sandbox Code Playgroud)

返回错误.

这是我正在试验的图表,如果有人想要玩一下.

graph = TinkerGraph.open()
e0 = graph.addVertex(T.id, 0, label, "User", "name", "e0")
e1 = graph.addVertex(T.id, 1, label, "User", "name", "e1")
e2 = graph.addVertex(T.id, 2, label, "User", "name", "e2")
e3 = graph.addVertex(T.id, 3, label, "User", "name", "e3")
e4 = graph.addVertex(T.id, 4, label, "User", "name", "e4")
e0.addEdge("Feedbacks", e2)
e0.addEdge("Meets", e1)
e2.addEdge("Feedbacks", e4)
e2.addEdge("Meets", e4) …
Run Code Online (Sandbox Code Playgroud)

shortest-path gremlin tinkerpop3

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

使用Cosmos DB Graph-API一次插入多个顶点

我希望使用Azure Cosmos DB Graph-API快速插入多个顶点.大多数当前的Microsoft示例逐个创建顶点并为每个顶点执行Gremlin查询,如下所示:

IDocumentQuery<dynamic> query = client.CreateGremlinQuery<dynamic>(graph, "g.addV('person').property('id', 'thomas').property('name', 'Thomas').property('age', 44)");

while (query.HasMoreResults)
{                    
    foreach (dynamic result in await query.ExecuteNextAsync())  {   
        Console.WriteLine($"\t {JsonConvert.SerializeObject(result)}"); 
    }
    Console.WriteLine();
}


query = client.CreateGremlinQuery<dynamic>(graph, "g.addV('person').property('id', 'mary').property('name', 'Mary').property('lastName', 'Andersen').property('age', 39)");

while (query.HasMoreResults)
{                    
    foreach (dynamic result in await query.ExecuteNextAsync())  {   
        Console.WriteLine($"\t {JsonConvert.SerializeObject(result)}"); 
    }
    Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)

然而,当我想创建几千个顶点和边缘以初始填充图形时,这不太理想,因为这可能需要一些时间.

这是与Microsoft.Azure.Graphs库v0.2.0-preview

如何有效地将多个顶点一次添加到Cosmos DB中,以便稍后使用Graph API语法进行查询?

gremlin azure-cosmosdb

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

Gremlin - 如果它不存在,只添加一个顶点

我有一组用户名(例如['abc','def','ghi'])要添加到图表中的"用户"标签下.

现在我首先要检查用户名是否已经存在(g.V().hasLabel('user').has('username','def')),然后仅添加"用户"标签下用户名属性不匹配的用户名.

此外,这可以在单个gremlin查询或groovy脚本中完成吗?

我正在使用titan graph数据库,tinkerpop3和gremlin REST服务器.

groovy graph-databases gremlin titan tinkerpop3

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

AWS Neptune上的Gremlin OLAP查询

在AWS Neptune文档中,它表示它与Apache TinkerPop Gremlin兼容,但它仅涉及在线事务处理(OLTP)类型的图遍历查询.我还没有看到任何关于长期运行的在线分析处理(OLAP)GraphComputer查询.

是否可以对存储在AWS Neptune图数据库服务中的图形执行OLAP查询?

olap graph amazon-web-services gremlin amazon-neptune

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

Cosmos Db Graph - Gremlin.Net与Microsoft.Graph的性能和吞吐量

在我学习如何使用Cosmos DB的图形时,我发现了两个Microsoft教程:

虽然我使用相同的查询,但它的执行不同.

使用Gremlin.Net,它立即执行.我经常(我会说70%的时间)得到一个RequestRateTooLargeException.如果我理解正确,这意味着我一直达到我选择的400RU/s限制.但是,当查询进入低谷时,它的速度是Microsoft.Azure.Graph解决方案的两倍.

实际上,使用Micorosft.Azure.Graph,我必须调用ExecuteNextAsync一个循环,一次返回一个结果.

所以问题是:
1°)我应该使用哪种方法来获得更好的性能?
2°)我怎么知道我的查询的RU所以我可以微调它?
3°)是否可以提高现有集合的吞吐量?

更新

问题3,我发现在我的数据库的"数据资源管理器"刀片中,我的图表有一个"Scale&Settings",我可以更新吞吐量.

Update2

问题2,我们无法在使用第一种方法(Gremlin.Net)时收取RU,但Microsoft.Graph方法ExecuteNextAsync返回FeedResponse带有字段的a RequestCharge.

graph-databases gremlin azure-cosmosdb

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

JanusGraph使用ScriptInputFormat批量加载CSV

我正在尝试将CS​​V文件加载到JanusGraph中.据我所知,我需要创建我的图形和模式,然后使用BulkLoaderVertexProgram和我自己的自定义groovy脚本来解析我的csv文件.这样做,它似乎工作,因为我可以看到顶点,但不创建边.

我的配置似乎与我在加载CSV文件时可以找到的所有示例几乎相同,但必须有一些我不理解或忘记的内容.

是否可以从CSV文件批量加载边缘?


这是我的设置:

我正在使用默认的bin/janusgraph.sh脚本启动cassandra

我的gremlin命令:

gremlin> :load data/defineNCBIOSchema.groovy
==>true
gremlin> graph = JanusGraphFactory.open('conf/gremlin-server/socket-janusgraph-apr-test.properties')
==>standardjanusgraph[cassandrathrift:[127.0.0.1]]
gremlin> defineNCBIOSchema(graph)
==>null
gremlin> graph.close()
==>null

gremlin> graph = GraphFactory.open('conf/hadoop-graph/apr-test-hadoop-script.properties')
==>hadoopgraph[scriptinputformat->graphsonoutputformat]
gremlin> blvp = BulkLoaderVertexProgram.build().bulkLoader(OneTimeBulkLoader).writeGraph('conf/gremlin-server/socket-janusgraph-apr-test.properties').create(graph)
==>BulkLoaderVertexProgram[bulkLoader=IncrementalBulkLoader, vertexIdProperty=bulkLoader.vertex.id, userSuppliedIds=false, keepOriginalIds=true, batchSize=0]
gremlin> graph.compute(SparkGraphComputer).workers(1).program(blvp).submit().get()
==>result[hadoopgraph[scriptinputformat->graphsonoutputformat],memory[size:0]]
gremlin> graph.close()
==>null

gremlin> graph = GraphFactory.open('conf/hadoop-graph/apr-test-hadoop-load.properties')
==>hadoopgraph[cassandrainputformat->gryooutputformat]
gremlin> g = graph.traversal().withComputer(SparkGraphComputer)
==>graphtraversalsource[hadoopgraph[cassandrainputformat->gryooutputformat], sparkgraphcomputer]
gremlin> g.E() <--- returns nothing
Run Code Online (Sandbox Code Playgroud)

我的JanusGraph:(conf/gremlin-server/socket-janusgraph-apr-test.properties)

gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cassandrathrift
storage.hostname=127.0.0.1
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.25
index.search.backend=elasticsearch
index.search.directory=/tmp/searchindex
index.search.elasticsearch.client-only=false
index.search.elasticsearch.local-mode=true
index.search.hostname=127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我的bulkLoader图:(conf/hadoop-graph/apr-test-hadoop-script.properties)

gremlin.graph=org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph …
Run Code Online (Sandbox Code Playgroud)

groovy hadoop gremlin janusgraph

6
推荐指数
0
解决办法
843
查看次数

传统的pdf索引解决方案与基于图形的版本相比

我的目的是使用存储在列表中的关键字索引包含pdf文件(以及其他文件类型)的任意目录.我有一个传统的解决方案,我听说使用例如SimpleGraph的基于图形的解决方案可以更优雅/高效并且独立于目录结构.

基于图形的解决方案(例如SimpleGraph)会是什么样的?

传统解决方案

// https://stackoverflow.com/a/14051951/1497139
List<File> pdfFiles = this.explorePath(TestPDFFiles.RFC_DIRECTORY, "pdf");
List<PDFFile> pdfs = this.getPdfsFromFileList(pdfFiles);
…
for (PDFFile pdf:pdfs) {
     // https://stackoverflow.com/a/9560307/1497139
     if (org.apache.commons.lang3.StringUtils.containsIgnoreCase(pdf.getText(), keyWord)) {
          foundList.add(pdf.file.getName()); // here we access by structure (early binding)
          // - in the graph solution by name (late binding)
     }
}
Run Code Online (Sandbox Code Playgroud)

gremlin simplegraph

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