有限时间内多个查询的最佳解决方案
Best solution for multiple queries in a limited time
对于 MORPG Hack'n'Slash 游戏,我目前使用的 Neo4j 模式如下:
我有一个 Neo4J 连接器 class,创建我的连接并实现 Singleton,每个 xxxMapper classes 使用这个实例,调用 Neo4jConnetor.getInstance().query(String query ) 其中 returns 查询结果的迭代器。
Atm 我在问自己一个问题,游戏每秒会有大量查询(比如每个玩家每秒 5 个)。所以我不知道,就性能而言,使用哪种模式,如果我应该继续使用我的 Singleton 系统或使用另一个系统,比如 Neo4jConnector 池或其他我还不知道的东西。
这是连接器 class:
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();
}
}
以及此 class 的示例调用:
Iterator<Map<String, Object>> iterator = Neo4jConnector.getInstance().query("optional Match(u:User{username:'"+username+"'}) return u.password as password, u.id as id");
Neo4j 的嵌入式 GraphDatabaseService 不是池化和线程安全的。
我不会推荐 RestGraphDatabase 和朋友,因为它很慢而且过时了。
只需使用 参数 而不是文字字符串,并且不要使用可选匹配 来启动查询。
如果您想要更快的访问速度,请查看 JDBC 驱动程序(即将更新)。
对于 MORPG Hack'n'Slash 游戏,我目前使用的 Neo4j 模式如下:
我有一个 Neo4J 连接器 class,创建我的连接并实现 Singleton,每个 xxxMapper classes 使用这个实例,调用 Neo4jConnetor.getInstance().query(String query ) 其中 returns 查询结果的迭代器。
Atm 我在问自己一个问题,游戏每秒会有大量查询(比如每个玩家每秒 5 个)。所以我不知道,就性能而言,使用哪种模式,如果我应该继续使用我的 Singleton 系统或使用另一个系统,比如 Neo4jConnector 池或其他我还不知道的东西。
这是连接器 class:
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();
}
}
以及此 class 的示例调用:
Iterator<Map<String, Object>> iterator = Neo4jConnector.getInstance().query("optional Match(u:User{username:'"+username+"'}) return u.password as password, u.id as id");
Neo4j 的嵌入式 GraphDatabaseService 不是池化和线程安全的。
我不会推荐 RestGraphDatabase 和朋友,因为它很慢而且过时了。
只需使用 参数 而不是文字字符串,并且不要使用可选匹配 来启动查询。
如果您想要更快的访问速度,请查看 JDBC 驱动程序(即将更新)。