这是使用neo4j创建内存数据库的正确方法吗?因此,遍历查询将仅访问缓存而不是磁盘.
方法 - 1:我试过这个:
package com.test;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.kernel.impl.util.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class CreateDBFactory {
private static GraphDatabaseService graphDb = null;
public static final String DB = "test/db";
public static GraphDatabaseService createInMemoryDB() {
System.out.println("- Inside createInMemoryDB() - ");
if (null == graphDb) {
synchronized (GraphDatabaseService.class) {
if (null == graphDb) {
System.out.println(" - Inside if clause -");
final Map<String, String> config = new HashMap<>();
config.put("neostore.nodestore.db.mapped_memory", "50M");
config.put("string_block_size", "60");
config.put("array_block_size", "300");
graphDb = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder(DB).setConfig(config)
.newGraphDatabase();
registerShutdownHook(graphDb);
}
}
}
return graphDb;
}
private static void registerShutdownHook(final GraphDatabaseService graphDb) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
graphDb.shutdown();
}
});
}
public static void clearDb() {
try {
if (graphDb != null) {
graphDb.shutdown();
graphDb = null;
}
FileUtils.deleteRecursively(new File(DB));
} catch (final IOException e) {
throw new RuntimeException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
方法-2 :使用Neo4jBasicDocTest类.
这里new ImpermanentDatabaseBuilder()没有创建target/test-data/impermanent-db文件夹.因此无法测试"Nancy"节点是否已创建.
Neo4j没有"内存"模式,因为所有数据总是存储在内存中而没有使用磁盘存储.ImpermanentGraphDatabase是你能找到的最接近的东西,但它只是随机创建一个数据目录,并在关闭时删除它.
如果您对使用磁盘没问题,可以使用上面的内容ImpermanentGraphDatabase,只需将neo4j的缓存设置得非常高.这将使所有内容都存储在内存和磁盘上.