Ich benutze Neo4J BatchInserter, um eine große Datenbank von Grund auf aufzubauen. Ich verwende mehrere Threads, um Daten aus dem BatchInserter zu lesen und Schreibvorgänge zu synchronisieren.Neo4J BatchInserter und Multithreading
Problem: Früher oder später ich in eine Exception ausgeführt werden, wenn zu versuchen, lesen Eigenschaften
- sind mit Assertions in DirectRecordAccess.putInBatc
mit Assertions deaktiviert ich eine ArrayIndexOutOfBounds in PropertyRecord.next bekommen
Ausnahme im Thread "Haupt" java.lang.ArrayIndexOutOfBoundsException: 4 bei org.neo4j.kernel.impl.store.record.PropertyRecord.next (PropertyRecord.java:190) bei org.neo4j.kernel.impl.store.record.PropertyRecord.next (PropertyRecord.java:41) bei org.neo4j.kernel.impl.transaction.state.Loaders $ 2.ensureHeavy (Loaders.java:189) bei org.neo4j.kernel.impl.transaction.state.Loaders $ 2.ensureHeavy (Loaders.java:161) bei org.neo4j.unsafe.batchinsert.DirectRecordAccess $ DirectRecordProxy.forReadingData (DirectRecordAccess.java:174) bei org .neo4j.unsafe.batchinsert.DirectRecordAccess $ DirectRecordProxy.forReadingData (DirectRecordAccess.java:115) bei org.neo4j.kernel.impl.transaction.state.PropertyTraverser.getPropertyChain (PropertyTraverser.java:65) bei org.neo4j.unsafe .batchinsert.internal.BatchInserterImpl.getPropertyChain (BatchInserterImpl.java:1000) bei org.neo4j.unsafe.batchinsert.internal.BatchInserterImpl .getNodeProperties (BatchInserterImpl.java:900)
JavaDoc heißt es: "Nur ein Thread zu einem Zeitpunkt, an dem Batch-Inserter arbeiten kann, Zugang Ausführen mehrerer Threads gleichzeitig haben die Synchronisation zu verwenden."
Frage (n):
- Ist BatchInserter Gewinde-Safe für Nur-Lese-Operationen?
- Wenn dies der Fall ist, sollte es sicher sein, synchronisierte Schreibvorgänge durchzuführen, solange keiner der gleichzeitig schreibgeschützten Threads Daten anfordert, die gerade geschrieben werden?
Vielen Dank für Ihre Bewertung!
Rüdiger