Questo è il mio codice sorgente di Main.java. E 'stato afferrato da esempi neo4j-apoc-1.0. L'obiettivo della modifica per memorizzare record 1M di 2 nodi e 1 relazione:Neo4j OutOfMemory problem
package javaapplication2;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.kernel.EmbeddedGraphDatabase;
public class Main
{
private static final String DB_PATH = "neo4j-store-1M";
private static final String NAME_KEY = "name";
private static enum ExampleRelationshipTypes implements RelationshipType
{
EXAMPLE
}
public static void main(String[] args)
{
GraphDatabaseService graphDb = null;
try
{
System.out.println("Init database...");
graphDb = new EmbeddedGraphDatabase(DB_PATH);
registerShutdownHook(graphDb);
System.out.println("Start of creating database...");
int valIndex = 0;
for(int i=0; i<1000; ++i)
{
for(int j=0; j<1000; ++j)
{
Transaction tx = graphDb.beginTx();
try
{
Node firstNode = graphDb.createNode();
firstNode.setProperty(NAME_KEY, "Hello" + valIndex);
Node secondNode = graphDb.createNode();
secondNode.setProperty(NAME_KEY, "World" + valIndex);
firstNode.createRelationshipTo(
secondNode, ExampleRelationshipTypes.EXAMPLE);
tx.success();
++valIndex;
}
finally
{
tx.finish();
}
}
}
System.out.println("Ok, client processing finished!");
}
finally
{
System.out.println("Shutting down database ...");
graphDb.shutdown();
}
}
private static void registerShutdownHook(final GraphDatabaseService graphDb)
{
// Registers a shutdown hook for the Neo4j instance so that it
// shuts down nicely when the VM exits (even if you "Ctrl-C" the
// running example before it's completed)
Runtime.getRuntime().addShutdownHook(new Thread()
{
@Override
public void run()
{
graphDb.shutdown();
}
});
}
}
Dopo poche iterazioni (circa 150K) ho ricevuto un messaggio di errore:
"java.lang.OutOfMemoryError: lo spazio di heap Java a java.nio.HeapByteBuffer. (HeapByteBuffer.java:39) a java.nio.ByteBuffer.allocate (ByteBuffer.java:312) a org.neo4j.kernel.impl.nioneo.store.PlainPersistenceWindow. (PlainPersistenceWindow.java : 30) presso org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.allocateNewWindow (PersistenceWindowPool.java:534) presso org.ne o4j.kernel.impl.nioneo.store.PersistenceWindowPool.refreshBricks (PersistenceWindowPool.java:430) a org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.acquire (PersistenceWindowPool.java:122) a org.neo4j. kernel.impl.nioneo.store.CommonAbstractStore.acquireWindow (CommonAbstractStore.java:459) in org.neo4j.kernel.impl.nioneo.store.AbstractDynamicStore.updateRecord (AbstractDynamicStore.java:240) presso org.neo4j.kernel. impl.nioneo.store.PropertyStore.updateRecord (PropertyStore.java:209) in org.neo4j.kernel.impl.nioneo.xa.Command $ PropertyCommand.execute (Command.java:513) in org.neo4j.kernel. impl.nioneo.xa.NeoTransaction.doCommit (NeoTransaction.java:443) presso org.neo4j.kernel.impl.transaction.xaframework.XaTransaction.commit (XaTransaction.java:316) in org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.commit (XaResourceManager.java:399) in org.neo4j.kernel.impl.transaction.xaframework.XaResourceHelpImpl.commit (XaResourceHelpImpl.java:64) in org.neo4j.kernel.impl.transaction.TransactionImpl.doCommit (TransactionImpl.java:514) in org.neo4j.kernel.impl.transaction.TxManager.commit (TxManager.java:571) in org.neo4j.kernel. impl.transaction.TxManager.commit (TxManager.java:543) presso org.neo4j.kernel.impl.transaction.TransactionImpl.commit (TransactionImpl.java:102) presso org.neo4j.kernel.EmbeddedGraphDbImpl $ TransactionImpl.finish (EmbeddedGraphDbImpl.java:329) all'indirizzo javaapplication2.Main.main (Main.java:62) 28.05.2010 9:52:14 org.neo4j.kernel.impl .nioneo.store.PersistenceWindowPool logWarn AVVERTENZA: [Neo4j-store-1M \ neostore.propertystore.db.strings] Impossibile allocare il buffer diretta"
Guys! Aiutami a plzzz, cosa ho fatto di sbagliato, come posso ripararlo? Testato su piattaforma Windows XP 32 bit SP3. Forse la soluzione nella configurazione personalizzata di creazione?
thnx 4 ogni consiglio!
Per cominciare, spostare la transazione sul ciclo esterno migliora molto la velocità. Poi c'è il [di inserimento lotto] (http://wiki.neo4j.org/content/Batch_Insert). C'è un po '[impostazioni di configurazione] (http://wiki.neo4j.org/content/Configuration_Settings) si potrebbe applicare. Eppure, non so che cosa sta causando l'errore in questo caso (ma sembra di Windows-correlate, non ha potuto confermare utilizzando Linux). – nawroth