Это мой исходный код Main.java. Он был взят из примеров neo4j-apoc-1.0. Цель модификации для хранения 1М записей 2 узлов и 1 отношения:
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();
}
} );
}
}
После нескольких итераций (около 150К) я получил сообщение об ошибке:
"java.lang.OutOfMemoryError: пространство кучи Java
в java.nio.HeapByteBuffer. (HeapByteBuffer.java:39)
в java.nio.ByteBuffer.allocate (ByteBuffer.java:312)
в org.neo4j.kernel.impl.nioneo.store.PlainPersistenceWindow. (PlainPersistenceWindow.java:30)
в org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.allocateNewWindow (PersistenceWindowPool.java:534)
в org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.refreshBricks (PersistenceWindowPool.java:430)
в org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.acquire (PersistenceWindowPool.java:122)
в org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.acquireWindow (CommonAbstractStore.java:459)
в org.neo4j.kernel.impl.nioneo.store.AbstractDynamicStore.updateRecord (AbstractDynamicStore.java:240)
в org.neo4j.kernel.impl.nioneo.store.PropertyStore.updateRecord (PropertyStore.java:209)
в org.neo4j.kernel.impl.nioneo.xa.Command $ PropertyCommand.execute (Command.java:513)
в org.neo4j.kernel.impl.nioneo.xa.NeoTransaction.doCommit (NeoTransaction.java:443)
в org.neo4j.kernel.impl.transaction.xaframework.XaTransaction.commit (XaTransaction.java:316)
в org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.commit (XaResourceManager.java:399)
в org.neo4j.kernel.impl.transaction.xaframework.XaResourceHelpImpl.commit (XaResourceHelpImpl.java:64)
в org.neo4j.kernel.impl.transaction.TransactionImpl.doCommit (TransactionImpl.java:514)
в org.neo4j.kernel.impl.transaction.TxManager.commit (TxManager.java:571)
в org.neo4j.kernel.impl.transaction.TxManager.commit (TxManager.java:543)
на org.neo4j.kernel.impl.transaction.TransactionImpl.commit (TransactionImpl.java:102)
at org.neo4j.kernel.EmbeddedGraphDbImpl $ TransactionImpl.finish (EmbeddedGraphDbImpl.java:329)
в javaapplication2.Main.main (Main.java:62)
28.05.2010 9:52:14 org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool logWarn
ВНИМАНИЕ: [neo4j-store-1M \ neostore.propertystore.db.strings] Невозможно выделить прямой буфер "
Ребята! Помогите мне плззз, что я сделал не так, как мне починить? Проверено на платформе Windows XP 32bit SP3. Может быть, решение в рамках создания пользовательской конфигурации?
Thnx 4 каждый совет!