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

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

{
    "query" : "SELECT ?x ?y WHERE { ?x <http://neo4j.org#RUN_ON> ?y . }"
}


不返回任何内容。当我通过insert_quad通过SPARQL插件插入数据时,例如使用类似查询

  "s" : "http://neo4j.org#Application_process_1",
  "p" : "http://neo4j.org#RUN_ON",
  "o" : "http://neo4j.org#Database_3",
  "c" : "http://neo4j.org"


相反,它可以工作。

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

我是否必须通过插件将所有数据插入数据库才能通过SPARQL查询?我可以通过Java API来执行此操作,以便例如在文件上使用解析器并为读取的每一行创建查询吗? (类似于为每种资源插入一些必填属性)。否则,有一种方法可以通过neo4j中的SPARQL插件加载多个数据而无需全部写入? (类似于用于文件条目的for)

谢谢。

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

最佳答案

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

您正在从MySQL解决方案之上的SPARQL之一迁移,这是2010年的最新技术,但如今却没有竞争力(或保持)。

我建议您改为查看Virtuososomething from the OWLIM family。如果您的数据不是很大(几百万个三倍),那么apache jenaopen rdf sesame的解决方案(也在sparql插件中使用)就可以满足您的需求。在我的测试中,按比例缩放Systap Bigdata也击败了Neo4j性能。

我列出了大多数基于Java的解决方案,因为您可以看到Neo4j也是其中的一种。

换句话说,着眼于升级到真正的SPARQL解决方案或重写Cypher和Neo4j。

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

{
    "query" : "SELECT ?x ?y
               WHERE { GRAPH<http://neo4j.org>{?x <http://neo4j.org#RUN_ON> ?y . }}"
}


但是,对于您的客户而言,关键的一点是他们可能正在通过sparql over http访问您的数据。这正是Neo4j sparql不兼容的地方,即neo4jsparql需要一个json字符串,而sparql http需要一个称为query的uri参数。

我现在认为我可以更好地理解您的问题。您直接使用Neo4J api将节点插入neo4j图。然后,您尝试使用SPARQL插件查询您插入的那些节点。这不起作用,因为SPARQL插件期望存在某种图形结构。您或者需要仔细研究SPARQL插件生成的图形并准确地重新创建它,或者使用:com.tinkerpop.blueprints.oupls.sail.GraphSail addStatement为您正确地进行创建。

关于java - Sparql插件用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24010978/

10-16 22:38