对于MORPG Hack' n' Slash游戏,我目前正在使用Neo4j这样的模式:
我有一个Neo4J连接器类,创建我的连接并实现Singleton,每个xxxMapper类都使用此实例,调用Neo4jConnetor.getInstance()。query(String query)返回queryresult的迭代器。
Atm我问自己一个问题,游戏每秒会有大量的查询(比如每位玩家每秒5次)。因此,就perfs而言,我不知道使用哪种模式,如果我应该继续使用我的Singleton系统或使用另一个像Neo4jConnector或其他任何我还不知道的东西。
这是连接器类:
public class Neo4jConnector{
private String urlRest;
private String url = "http://localhost:7474";
protected QueryEngine<?> engine;
protected static Neo4jConnector INSTANCE = new Neo4jConnector();
private Neo4jConnector(){
urlRest = url+"/db/data";
final RestAPI graphDb = new RestAPIFacade(urlRest);
engine = new RestCypherQueryEngine(graphDb);
}
public static Neo4jConnector getInstance(){
if (INSTANCE == null)
{
INSTANCE = new Neo4jConnector();
}
return INSTANCE;
}
@SuppressWarnings("unchecked")
public Iterator<Map<String, Object>> query(String query){
QueryResult<Map<String, Object>> row = (QueryResult<Map<String, Object>>) engine.query(query, Collections.EMPTY_MAP);
return row.iterator();
}
}
以及此类的示例调用:
Iterator<Map<String, Object>> iterator = Neo4jConnector.getInstance().query("optional Match(u:User{username:'"+username+"'}) return u.password as password, u.id as id");
答案 0 :(得分:2)
Neo4j的嵌入式GraphDatabaseService没有池化和线程安全。
我不推荐RestGraphDatabase和朋友,因为它很慢且过时。
只需使用参数而不是文字字符串,不要使用可选匹配来启动查询。
如果您希望更快地访问,请查看JDBC驱动程序(将很快更新)。