2014-01-20 1 views
2

나는 몇 백만 노드의 많은 관계가있는 neo4j 데이터베이스를 가지고 있습니다. 데이터를 추가하는 프로그램을 실행하는 동안 JVM이 손상된 것 같습니다. 내가 시작 적어도 것을 ( 서버 충돌 후 손상된 neo4j 데이터베이스 복구 graphdb.NotFoundException

Exception in thread "main" org.neo4j.graphdb.NotFoundException: Node[20924] not found. This can be because someone else deleted this entity while we were trying to read properties from it, or because of concurrent modification of other properties on this entity. The problem should be temporary. at org.neo4j.kernel.impl.core.Primitive.ensureFullProperties(Primitive.java:601) at org.neo4j.kernel.impl.core.Primitive.ensureFullProperties(Primitive.java:579) at org.neo4j.kernel.impl.core.Primitive.hasProperty(Primitive.java:309) at org.neo4j.kernel.impl.core.NodeImpl.hasProperty(NodeImpl.java:53) at org.neo4j.kernel.impl.core.NodeProxy.hasProperty(NodeProxy.java:160) at org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.hasProperty(GDSBackedQueryContext.scala:66) at org.neo4j.cypher.internal.spi.gdsimpl.GDSBackedQueryContext$$anon$1.hasProperty(GDSBackedQueryContext.scala:48) at org.neo4j.cypher.internal.commands.Has.isMatch(Predicate.scala:203) at org.neo4j.cypher.internal.pipes.FilterPipe$$anonfun$internalCreateResults$1.apply(FilterPipe.scala:30) at org.neo4j.cypher.internal.pipes.FilterPipe$$anonfun$internalCreateResults$1.apply(FilterPipe.scala:30) at scala.collection.Iterator$$anon$14.hasNext(Iterator.scala:390) at scala.collection.Iterator$class.foreach(Iterator.scala:727) at scala.collection.AbstractIterator.foreach(Iterator.scala:1156) at org.neo4j.cypher.internal.pipes.EagerAggregationPipe.internalCreateResults(EagerAggregationPipe.scala:76) at org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:69) at org.neo4j.cypher.internal.pipes.PipeWithSource.createResults(Pipe.scala:66) at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.org$neo4j$cypher$internal$executionplan$ExecutionPlanImpl$$prepareStateAndResult(ExecutionPlanImpl.scala:164) at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$getLazyReadonlyQuery$1.apply(ExecutionPlanImpl.scala:139) at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl$$anonfun$getLazyReadonlyQuery$1.apply(ExecutionPlanImpl.scala:138) at org.neo4j.cypher.internal.executionplan.ExecutionPlanImpl.execute(ExecutionPlanImpl.scala:38) at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72) at org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:67) at org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:66) at querygraph.BasicStatsQueries.main(BasicStatsQueries.java:54) Caused by: org.neo4j.kernel.impl.nioneo.store.InvalidRecordException: PropertyRecord[11853043] not in use at org.neo4j.kernel.impl.nioneo.store.PropertyStore.getRecord(PropertyStore.java:453) at org.neo4j.kernel.impl.nioneo.store.PropertyStore.getLightRecord(PropertyStore.java:306) at org.neo4j.kernel.impl.nioneo.xa.ReadTransaction.getPropertyRecordChain(ReadTransaction.java:185) at org.neo4j.kernel.impl.nioneo.xa.ReadTransaction.loadProperties(ReadTransaction.java:215) at org.neo4j.kernel.impl.nioneo.xa.ReadTransaction.nodeLoadProperties(ReadTransaction.java:239) at org.neo4j.kernel.impl.persistence.PersistenceManager.loadNodeProperties(PersistenceManager.java:111) at org.neo4j.kernel.impl.core.NodeManager.loadProperties(NodeManager.java:833) at org.neo4j.kernel.impl.core.NodeImpl.loadProperties(NodeImpl.java:143) at org.neo4j.kernel.impl.core.Primitive.ensureFullProperties(Primitive.java:596) ... 23 more

은 하나 개의 스레드가 발생했습니다 나중에 인덱스를 사용하여 데이터베이스를 조회하려 할 때, 일반적으로 열고 노드의 일부를 검색하지만, 어떤 점에서 다음과 같은 오류를 반환) 쿼리를 실행하고, 모든 읽기, 쓰기가 아니었다. 예외가 일시적인 것이라고 주장하지만이 인덱스를 쿼리 할 때마다 이런 일이 발생합니다. 그러므로 나는 그것이 나쁜 셧다운과 관련이 있다고 가정한다. 나는 그것을 막기 위해 코드를 구현하기 전에 강제 종료로부터 데이터베이스 손상을 경험했지만, neo4j는 데이터베이스를 복구 할 수 있었지만 시간이 좀 걸렸습니다. 이것이 훨씬 더 어려워 보인다.

인덱스를 수동으로 반복하고 try-catch를 추가하면 위에 나열된 인덱스 이후의 모든 노드에 대해 오류가 반환되기 시작했습니다. 이것은 모든 노드가 존재하지 않거나 손상되었음을 의미합니까? 이는 인덱스에 약 백만 노드가 있어야하기 때문에 상당한 데이터 손실이 있음을 의미합니다. 데이터베이스를 복구하려면 어떻게해야합니까?

나는 1.9.2를 사용하고 있는데 라벨 등을 사용하여 업그레이드하고 싶지만 지금 당장은 중요한 작업을 위해이 데이터베이스가 필요하며 지금은 중요한 것을 변경할 시간이 없습니다.

도움을 주셔서 감사드립니다.

답변

1

죄송합니다. :(?

내가 삭제하고 인덱스를 다시 작성하고 데이터베이스의 백업을 만들고 권장 것.

프로그래밍 당신은 또한 /data/graph.db/index/lucene/node/<indexname>에서 디렉토리를 삭제할 수 있습니다 인덱스를 삭제할 수없는 경우였다 충돌 어떤 종류의 . 데이터베이스가 종료 될 때

를 그런 후에 당신은 프로그램을 다시 색인 할 수 있습니다 노드를위한

사용 (노드 N : GlobalGraphOperations.at (dB) .getAllNodes()) { 경우을 (node.hasProperty을 ("key")) db.index(). forNodes ("index"). add (node, "key", node.getProperty ("key")); }

Google에서 분석을위한 데이터베이스를 얻을 수 있다면 좋을 것입니다. 고마워요

+0

고마워요! 나는 이것을 시도해보고 이것이 작동한다면 이것을 대답으로 표시 할 것입니다. JVM 충돌은 아마도 neo4j를 사용하고 있던 프로그램에서 발생했을 것입니다. neo4j 자체인지 또는 다른 구성 요소인지 알 수 없습니다. 내가 데이터베이스를 가질 수 있는지 알아 내고, 그렇다면 서버 로그를 보낼 것입니다. – bsg

+0

비슷한 상황에서 데이터베이스를 몇 번 볼 수 있는지 묻는 것을 보았습니다. 네오가 실제로 어떤 문제보다 우선하다는 것을 아는 것이 좋습니다. 감사합니다. – bsg

+0

for (Node n : GlobalGraphOperations.at (db) .getAllNodes())를 의미했다고 가정 할 수 있습니까? – bsg

관련 문제