通过Neo4j rest api发送的数据不会持久化

通过Neo4j rest api发送的数据不会持久化,neo4j,cypher,data-storage,neo4jrestclient,Neo4j,Cypher,Data Storage,Neo4jrestclient,我正在使用Neo4j rest api创建一个包含大量节点和关系的图形结构。我使用以下cypher查询格式在一个post请求中发送一批节点及其关系 UNWIND [[0,1], [0,6309]] AS pair MATCH (n {name: pair[0]}), (m {name: pair[1]}) CREATE (n)-[:X]->(m) 我正在从1GB大小的文件中读取数据,并将数据批量上传到neo4j。我发送的所有请求的响应代码都是200,但当我检查{$NEO4J_HOME}/

我正在使用Neo4j rest api创建一个包含大量节点和关系的图形结构。我使用以下cypher查询格式在一个post请求中发送一批节点及其关系

UNWIND [[0,1], [0,6309]] AS pair
MATCH (n {name: pair[0]}), (m {name: pair[1]})
CREATE (n)-[:X]->(m)
我正在从1GB大小的文件中读取数据,并将数据批量上传到neo4j。我发送的所有请求的响应代码都是200,但当我检查
{$NEO4J_HOME}/data/databases/graph.db
大小时,它只显示244K大小。另外,graph.db中的du-hc*store.db*命令显示所有nodestore.db、relationshipstore.db和propertystore.db的大小都是0。为什么通过RESTAPI上传的数据不会写入graph DB中的文件?任何帮助都将不胜感激

du-hc*store.db*

0       neostore.nodestore.db
4.0K    neostore.nodestore.db.id
8.0K    neostore.nodestore.db.labels
4.0K    neostore.nodestore.db.labels.id
0       neostore.propertystore.db
8.0K    neostore.propertystore.db.arrays
4.0K    neostore.propertystore.db.arrays.id
4.0K    neostore.propertystore.db.id
8.0K    neostore.propertystore.db.index
4.0K    neostore.propertystore.db.index.id
8.0K    neostore.propertystore.db.index.keys
4.0K    neostore.propertystore.db.index.keys.id
0       neostore.relationshipstore.db
这是使用jersey客户端发送给neo4j rest api的完整请求

Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter(user, password));
WebResource cypherResource = client.resource("http://localhost:7474/db/data/cypher");
ClientResponse cypherResponse = cypherResource.accept(MediaType.APPLICATION_JSON)
            .type(MediaType.APPLICATION_JSON_TYPE).entity(query).post(ClientResponse.class);
示例查询集为实体:

{"query":"UNWIND [[0,1], [0,6309]] AS pair
MATCH (n {name: pair[0]}), (m {name: pair[1]}) CREATE (n)-[:X]->(m)"}

当查询在任何上下文(RESTAPI、Neo4j浏览器、Neo4j shell等)中都无法工作时,我被REST上下文跟踪了

根据所有文件的大小,数据库中没有任何关系或节点。查询首先在节点上进行匹配:因为没有节点,所以永远不会执行
CREATE
子句

要创建不存在的节点,然后创建关系,您需要使用而不是
匹配
。您还应该在节点上设置一个标签,为了提高性能和正确性,请在该标签的
name
属性上创建一个标签(它将同时创建一个索引):

然后:

(如果文件中可能存在重复对,也可以对关系使用
MERGE


您是否知道Cypher子句,即使手动批处理对,它也可以比远程查询更快地导入数据?

我被REST上下文跟踪,而实际上查询在任何上下文(REST API、Neo4j浏览器、Neo4j shell等)中都无法工作

根据所有文件的大小,数据库中没有任何关系或节点。查询首先在节点上进行匹配:因为没有节点,所以永远不会执行
CREATE
子句

要创建不存在的节点,然后创建关系,您需要使用而不是
匹配
。您还应该在节点上设置一个标签,为了提高性能和正确性,请在该标签的
name
属性上创建一个标签(它将同时创建一个索引):

然后:

(如果文件中可能存在重复对,也可以对关系使用
MERGE


您是否知道Cypher子句,即使手动批处理对,它也可以比远程查询更快地导入数据?

向我们展示发送给Neo4j的完整查询(方法、路径、标题、正文)。也许你从未提交过交易?我已经用发送给Neo4j的完整查询更新了问题。感谢您的帮助。向我们展示发送给Neo4j的完整查询(方法、路径、标题、正文)。也许你从未提交过交易?我已经用发送给Neo4j的完整查询更新了问题。谢谢你的帮助。谢谢你的解决方案。我尝试了这种方法,它似乎工作正常。neostore文件从我发送的数据中得到更新,我使用多个线程以批处理方式并发发布数据。然而,对于1GB大小的数据集,它花费了将近3个小时的时间,并且仍然需要上传。我知道
加载CSV
选项,但我必须使用rest api将neo4j的性能与另一个用于流式图形的图形数据库进行比较。感谢您的解决方案。我尝试了这种方法,它似乎工作正常。neostore文件从我发送的数据中得到更新,我使用多个线程以批处理方式并发发布数据。然而,对于1GB大小的数据集,它花费了将近3个小时的时间,并且仍然需要上传。我知道
加载CSV
选项,但我必须使用restapi将neo4j的性能与流图的另一个图形数据库进行比较。
CREATE CONSTRAINT ON (n:Node) ASSERT n.name IS UNIQUE;
UNWIND [[0,1], [0,6309]] AS pair
MERGE (n:Node {name: pair[0]})
MERGE (m:Node {name: pair[1]})
CREATE (n)-[:X]->(m)