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);
}
}
}
접근 -2 : 사용 Neo4jBasicDocTest 클래스를.
여기서 new ImpermanentDatabaseBuilder()
은 대상/test-data/impermanent-db 폴더를 만들지 않습니다. 그래서 "Nancy"노드를 테스트 할 수 없게됩니다.
Nicholas에게 감사드립니다. :) 내가 알고 싶은 한 가지 - 위의 단계를 수행 한 후 쿼리를 실행하면 메모리와 디스크를 먼저 살펴 본다. 그렇지? 첫 번째는 메모리 캐시가 사용된다는 의미입니다. – Abhi
예. Neo4j는 먼저 캐시에 도달하고 존재하지 않으면 디스크에 도달합니다. – Nicholas