在有限的时间内进行多个查询的最佳解决方案

时间:2015-04-14 08:24:17

标签: java neo4j

对于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");

1 个答案:

答案 0 :(得分:2)

Neo4j的嵌入式GraphDatabaseService没有池化和线程安全。

我不推荐RestGraphDatabase和朋友,因为它很慢且过时。

只需使用参数而不是文字字符串,不要使用可选匹配来启动查询。

如果您希望更快地访问,请查看JDBC驱动程序(将很快更新)。