Titan Graph查询执行时间过长

时间:2015-03-04 17:03:06

标签: graph berkeley-db titan gremlin

我对Titan查询的执行速度有疑问。

更具体一点: 我使用BerkeleyJe为我的图形创建了一个属性文件,如下所示:

storage.backend=berkeleyje
storage.directory=/finalGraph_script/graph

之后,我打开Gremlin.bat打开我的图表。

我为我的节点设置了所有必要的索引键:

m = g.getManagementSystem();
username = m.makePropertyKey('username').dataType(String.class).make()
m.buildIndex('byUsername',Vertex.class).addKey(username).unique().buildCompositeIndex()
m.commit()
g.commit()

(所有其他键的创建方式相同......)

我导入了一个包含大约100 000行的csv文件,每行生成至少2个节点和一些边。所有这些都是通过Batchloading完成的。 这没有问题。

然后我执行一个看起来像这样的groupBy查询:

m = g.V.has("imageLink").groupBy{it.imageLink}{it.in("is_on_image").out("is_species")}{it._().species.groupCount().cap.next()}.cap.next()

使用此查询,我希望每个节点都具有属性键" imageLink"不同物种的数量"。 "物种"也是节点,可以通过返回边缘来调用" is_on_image"并遵循边缘" is_species"。 对于我最近的节点,这也像魅力一样。此查询在我的本地PC上大约需要2分钟。

但现在问题。 我的整个数据集是一个拥有1000万条目的csv。结构与上面相同,每行也创建至少2个节点和一些边。

使用我的本地PC甚至无法导入此设置,在加载3天后导致内存异常。

所以我在具有更多RAM和内存的服务器上尝试了相同的操作。在那里进口工作,大约需要1天。但该团体在大约3天后失败了。 我实际上不知道groupBy本身是否会失败,或者只是在很长一段时间后才连接到服务器。

所以我的第一个问题: 在我看来,对于图形数据库来说,大约有1500万个节点应该不是什么大不了的,应该吗?

第二个问题: 它花了这么长时间是正常的吗?或者无论如何使用指数来加速它?我将索引配置为上面的监听:(

我不知道您需要哪些确切信息来帮助我,但请告诉我除此之外您还需要什么。

非常感谢! 最好的祝福, 里卡多

编辑1:我在图表中加载CSV的方式: 我使用这段代码,删除了一些不必要的属性,这些属性也为某些节点设置了属性,加载方式相同。

bg = new BatchGraph(g, VertexIDType.STRING, 10000)
new File("annotation_nodes_wNothing.csv").eachLine({ final String line ->def (annotationId,species,username,imageLink) = line.split('\t')*.trim();def userVertex = bg.getVertex(username) ?: bg.addVertex(username);def imageVertex = bg.getVertex(imageLink) ?: bg.addVertex(imageLink);def speciesVertex = bg.getVertex(species) ?: bg.addVertex(species);def annotationVertex = bg.getVertex(annotationId) ?: bg.addVertex(annotationId);userVertex.setProperty("username",username);imageVertex.setProperty("imageLink", imageLink);speciesVertex.setProperty("species",species);annotationVertex.setProperty("annotationId", annotationId);def classifies = bg.addEdge(null, userVertex, annotationVertex, "classifies");def is_on_image = bg.addEdge(null, annotationVertex, imageVertex, "is_on_image");def is_species = bg.addEdge(null, annotationVertex, speciesVertex, "is_species");})
bg.commit()
g.commit() 

0 个答案:

没有答案