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

对于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> query(String query){ QueryResult<Map> row = (QueryResult<Map>) engine.query(query, Collections.EMPTY_MAP); return row.iterator(); } } 

以及此类的示例调用:

 Iterator<Map> iterator = Neo4jConnector.getInstance().query("optional Match(u:User{username:'"+username+"'}) return u.password as password, u.id as id"); 

Neo4j的嵌入式GraphDatabaseService不是池和线程安全的。

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

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

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