Ruby on rails 解析一个大文件并填充Neo4j数据库

Ruby on rails 解析一个大文件并填充Neo4j数据库,ruby-on-rails,neo4j,neography,Ruby On Rails,Neo4j,Neography,我正在从事一个RubyonRails项目,该项目将读取和解析一些大的文本文件(大约10万行),并使用这些数据构建Neo4j节点(我正在使用)。 这是我编写的代码中与Neo4j相关的部分: d= Neography::Rest.new.execute_query("MATCH (n:`Label`) WHERE (n.`name`='#{id}') RETURN n") d= Neography::Node.load(d, @neo) p= Neography::Rest.

我正在从事一个RubyonRails项目,该项目将读取和解析一些大的文本文件(大约10万行),并使用这些数据构建Neo4j节点(我正在使用)。 这是我编写的代码中与Neo4j相关的部分:

    d= Neography::Rest.new.execute_query("MATCH (n:`Label`) WHERE (n.`name`='#{id}') RETURN n")
    d= Neography::Node.load(d, @neo)
    p= Neography::Rest.new.create_node("name" => "#{id}") 
    Neography::Rest.new.add_label(p, "LabelSample") 
    d=Neography::Rest.new.get_node(d)
    Neography::Rest.new.create_relationship("belongs_to", p, d)
因此,我想做的是:在已经填充的数据库中搜索与解析数据具有相同“name”字段的节点,为该数据创建一个新节点,并最终在两者之间创建一个关系。 显然,这段代码的执行时间太长了。 所以我尝试了Neography的批次,但遇到了一些问题

    p = Neography::Rest.new.batch [:create_node, {"name" => "#{id}"}]
在中给了我一个“nil:NilClass的未定义方法'split'”

id[“self”].split(“/”).last

给我一个get_节点的Neography::UnknownBatchOptionException

我甚至不确定这是否能为我节省足够的时间

我还尝试了不同的方法来实现这一点,例如使用,但是我找不到一种方法来从数据库中获取我需要的已经创建的节点。 正如你所看到的,我是一个新手,所以任何帮助都将不胜感激。
提前感谢。

您可以使用纯cypher(或新造影生成的cypher)来完成此操作。也许是这样的:

MATCH (n:Label) WHERE n.name={id}
WITH n
CREATE (p:LabelSample {name: n.name})-[:belongs_to]->n
我不是在使用CREATE,但是如果您不想创建重复的
LabelSample
节点,可以执行以下操作:

MATCH (n:Label) WHERE n.name={id}
WITH n
MERGE (p:LabelSample {name: n.name})
CREATE p-[:belongs_to]->n

请注意,我使用的是params,这通常是性能方面的建议(虽然这只是一个查询,所以没什么大不了的)

谢谢Brian,我尝试了一下,性能明显提高,但仍然需要大约25分钟(从我以前的代码中的“it haves was 80 minutes,I deep”(已经80分钟了,我放弃)开始)来处理我的80k行长的样本数据集。有什么方法可以提高性能吗?@AGarofoli如果您反复执行相同的查询,您将从params获得巨大的性能提升,请检查并用param替换
{name:n.name}
。您还可以考虑在每个X项中关闭事务时执行更新的块。这会给你一个小小的提升,虽然我不确定你会如何用新摄影术做到这一点。
MATCH (n:Label) WHERE n.name={id}
WITH n
MERGE (p:LabelSample {name: n.name})
CREATE p-[:belongs_to]->n