Đây là mã nguồn của Main.java. Nó được lấy từ ví dụ neo4j-apoc-1.0. Mục tiêu của điều chỉnh để lưu trữ hồ sơ 1M 2 nút và 1 mối quan hệ: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();
}
});
}
}
Sau một vài lần lặp (khoảng 150K) Tôi đã nhận thông báo lỗi:
"java.lang.OutOfMemoryError: Java không gian đống tại java.nio.HeapByteBuffer. (HeapByteBuffer.java:39) tại java.nio.ByteBuffer.allocate (ByteBuffer.java:312) tại org.neo4j.kernel.impl.nioneo.store.PlainPersistenceWindow. (PlainPersistenceWindow.java : 30) tại org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.allocateNewWindow (PersistenceWindowPool.java WEBC34) tại org.ne o4j.kernel.impl.nioneo.store.PersistenceWindowPool.refreshBricks (PersistenceWindowPool.java:430) tại org.neo4j.kernel.impl.nioneo.store.PersistenceWindowPool.acquire (PersistenceWindowPool.java:122) tại org.neo4j. kernel.impl.nioneo.store.CommonAbstractStore.acquireWindow (CommonAbstractStore.java:459) tại org.neo4j.kernel.impl.nioneo.store.AbstractDynamicStore.updateRecord (AbstractDynamicStore.java:240) tại org.neo4j.kernel. impl.nioneo.store.PropertyStore.updateRecord (PropertyStore.java:209) tại org.neo4j.kernel.impl.nioneo.xa.Command $ PropertyCommand.execute (Command.java WEBC13) tại org.neo4j.kernel. impl.nioneo.xa.NeoTransaction.doCommit (NeoTransaction.java:443) tại org.neo4j.kernel.impl.transaction.xaframework.XaTransaction.commit (XaTransaction.java:316) tại org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.commit (XaResourceManager.java:399) tại org.neo4j.kernel.impl.transaction.xaframework.XaResourceHelpImpl.commit (XaResourceHelpImpl.java:64) tại org.neo4j.kernel.impl.transaction.TransactionImpl.doCommit (TransactionImpl.java WEBC14) tại org.neo4j.kernel.impl.transaction.TxManager.commit (TxManager.java WEBC71) tại org.neo4j.kernel. impl.transaction.TxManager.commit (TxManager.java WEBC43) tại org.neo4j.kernel.impl.transaction.TransactionImpl.commit (TransactionImpl.java:102) tại org.neo4j.kernel.EmbeddedGraphDbImpl $ TransactionImpl.finish (EmbeddedGraphDbImpl.java:329) tại javaapplication2.Main.main (Main.java:62) 28.05.2010 9:52:14 org.neo4j.kernel.impl .nioneo.store.PersistenceWindowPool logWarn CẢNH BÁO: [neo4j-store-1M \ neostore.propertystore.db.strings] Không thể cấp phát bộ đệm trực tiếp "
Guys! Giúp tôi plzzz, những gì tôi đã làm sai, làm thế nào tôi có thể sửa chữa nó? Thử nghiệm trên nền tảng Windows XP 32bit SP3. Có thể giải pháp trong cấu hình tùy chỉnh tạo?
thnx 4 mọi lời khuyên!
Để bắt đầu, di chuyển giao dịch đến vòng ngoài cải thiện tốc độ rất nhiều. Sau đó có [batch inserter] (http://wiki.neo4j.org/content/Batch_Insert). Có một số [thiết lập cấu hình] (http://wiki.neo4j.org/content/Configuration_Settings) bạn có thể áp dụng. Tuy nhiên, tôi không biết những gì gây ra lỗi trong trường hợp này (nhưng có vẻ như liên quan đến Windows, không thể xác nhận nó bằng cách sử dụng Linux). – nawroth