我该如何在Neo4j中进行多线程插入?

时间:2015-10-06 10:57:48

标签: multithreading neo4j spring-data-neo4j

我正在尝试解决在Neo4j中插入相关节点时出现的问题。使用org.springframework.data.neo4j.repository.GraphRepository的标准save方法,由多个线程插入节点。

有时,在获取相关节点以便定义关系时插入失败。异常消息是这样的:org.neo4j.graphdb.NotFoundException:' __ type __'在http://neo4j:7474/db/data/relationship/105550

从curl调用此URL会返回一个JSON对象,该对象似乎正确定义了__type__,这表明异常是由插入线程之间的争用引起的。

发起对存储库的调用的方法是注释@ Neo4jTransactional。 @ Neo4jTransactional保证什么原子性和事务隔离?我应该如何将它用于多线程插入?

更新: 我现在能够在调试器中看到这种情况。代码试图在此关系的一端获取节点及其所有关系。它会抛出异常,因为缺少类型属性。这是最初返回的JSON。

{
  "extensions" : { },
  "start" : "http://localhost:7474/db/data/node/617",
  "property" : "http://localhost:7474/db/data/relationship/533/properties/{key}",
  "self" : "http://localhost:7474/db/data/relationship/533",
  "properties" : "http://localhost:7474/db/data/relationship/533/properties",
  "type" : "CONTAINS",
  "end" : "http://localhost:7474/db/data/node/650",
  "metadata" : {
    "id" : 533,
    "type" : "CONTAINS"
  },
  "data" : { }
}

几秒钟后,同一个REST调用返回此JSON:

{
  "extensions" : { },
  "start" : "http://localhost:7474/db/data/node/617",
  "property" : "http://localhost:7474/db/data/relationship/533/properties/{key}",
  "self" : "http://localhost:7474/db/data/relationship/533",
  "properties" : "http://localhost:7474/db/data/relationship/533/properties",
  "type" : "CONTAINS",
  "end" : "http://localhost:7474/db/data/node/650",
  "metadata" : {
    "id" : 533,
    "type" : "CONTAINS"
  },
  "data" : {
    "__type__" : "ProductRelationship"
  }
}

我无法理解为什么在插入关系和指定类型之间会有这么长的延迟。为什么一下子不发生这一切?

0 个答案:

没有答案