Java Sparql插件的使用

Java Sparql插件的使用,java,neo4j,sparql,Java,Neo4j,Sparql,我正在测试Neo4J,以将其与我的公司近年来使用的EA平台进行比较。这个平台依赖于我们使用SPARQL/SPARUL查询的MySQL数据库。 除了SPARUL支持(目前不是强制性的)之外,我们的想法是用Neo4J替换这个MySQL数据库,并测试直接使用SPARQL查询是否有利,或者最好用cypher翻译SPARQL查询,并进行类似的测试 因为我对Neo4J2的SPARQL插件有一些问题,所以我切换回了1.9.7。 我已经用一些从.nt文件导入的数据填充了testdb,但是当我使用我的高级rest

我正在测试Neo4J,以将其与我的公司近年来使用的EA平台进行比较。这个平台依赖于我们使用SPARQL/SPARUL查询的MySQL数据库。 除了SPARUL支持(目前不是强制性的)之外,我们的想法是用Neo4J替换这个MySQL数据库,并测试直接使用SPARQL查询是否有利,或者最好用cypher翻译SPARQL查询,并进行类似的测试

因为我对Neo4J2的SPARQL插件有一些问题,所以我切换回了1.9.7。 我已经用一些从.nt文件导入的数据填充了testdb,但是当我使用我的高级rest客户端对chrome进行查询时,我没有得到我希望的结果。像这样的简单查询

{
    "query" : "SELECT ?x ?y WHERE { ?x <http://neo4j.org#RUN_ON> ?y . }"
}
相反,它起作用了

我注意到,在这种情况下,节点和关系的组成与我通过JavaAPI创建节点时得到的不同(例如,关系有3个属性:我没有的cp、c、p)

我必须通过插件在数据库中插入所有数据才能通过SPARQL进行查询吗?我可以通过JavaAPI这样做吗?例如,我可以在文件上使用解析器,为我读到的每一行创建一个查询?(类似于为每种资源插入一些必需的属性)。否则,有没有一种方法可以通过neo4j中的SPARQL插件加载多个数据,而不用全部写入?(有点像文件上的条目需要清除)

谢谢你的帮助


编辑:我不想使用另一种在SPARQL中性能更好的技术。我现在只想知道Neo4j的SPARQL插件是否允许我以编程的方式进行多次插入,或者我是否被迫使用它将数据插入到我想用插件本身查询的图形中。关键是,如果可能的话,使用SPARQL测试某些复杂查询的性能,并使用关系数据库和仅使用Neo4j的本机API(或Cypher)的解决方案来评估旧解决方案的各种因素。

您确定要这样做吗?虽然NEO4j很不错,但还有很多其他生产质量的SPARQL解决方案。我不能推荐一个非标准(sparql http协议),非供应商支持的插件作为有效的技术解决方案

您正在从MySQL解决方案之上的SPARQL迁移,该解决方案在2010年是最先进的,但现在没有竞争力(或保持)

我建议你看一下,或者换个角度。如果您的数据不是很大(几百万个三元组),那么来自或的解决方案(也在sparql插件中使用)适合您的需要。在我的测试中,Scaling-wise的性能也超过了Neo4j

我列出的主要是基于java的解决方案,因为您认为看到Neo4j也是一个不错的解决方案

换句话说,看看升级到真正的SPARQL解决方案,或者为Cypher和Neo4j重写

现在谈谈你的实际问题。当您在加载数据时引入上下文或命名图时,您可能还需要在查询中使用它

{
    "query" : "SELECT ?x ?y 
               WHERE { GRAPH<http://neo4j.org>{?x <http://neo4j.org#RUN_ON> ?y . }}"
}
{
“查询”:“选择?x?y”
其中{GRAPH{x?y.}}”
}
然而,对于您的客户来说,一件关键的事情是,他们可能正在通过http使用sparql来访问您的数据。这正是Neo4j sparql不兼容的地方,即neo4jsparql需要一个json字符串,而sparql http需要一个名为query的uri参数


我现在想我更明白你的问题了。您直接使用Neo4J api将节点插入Neo4J图形。然后尝试使用SPARQL插件查询插入的节点。这不起作用,因为SPARQL插件希望存在某种图形结构。您要么需要仔细研究由SPARQL插件生成的图形并重新创建它,要么使用“:<代码> C.TurkPop.BurPrtut.OpPLS.SraveScript SaveAdScript < /代码>为您正确地进行操作。< /p>Ty为答案,但我不想考虑其他SPARQL解决方案:简单地说,我们在NeX4J中有很多优点。案例我只是想了解是否有可能继续使用我们的SPARQL平台(并通过插件查询Neo4J数据库),或者我们是否需要改变一些东西以便直接使用Neo4J API/Cypher。正如我所说的,这是一个测试,我只是很难在combo和multiple Insert query中正确使用SPARQL插件。如果本机平台对您有优势,那么直接使用本机平台,除非有真正的动机,否则不要使用不必要的抽象层/间接层。动机是,如果我可以保留这一抽象层,我可以通过替换数据库和更改SPARQL端点,以一种不必要的方式为使用我们平台的客户进行更改。否则,我必须更改客户的平台,以匹配使用本机Neo4J方法的更改。我们正在探索这两种方法中哪一种更方便,但我必须做一些测试,以了解一种方法与另一种方法的优缺点。+1因为这是一个很好的建议,但-1因为它不能真正回答OP的问题:\@JoshuaTaylor我想把它放在评论里,但是时间太长了。
{
    "query" : "SELECT ?x ?y 
               WHERE { GRAPH<http://neo4j.org>{?x <http://neo4j.org#RUN_ON> ?y . }}"
}