我制作了一个带有 mysql 的 bukkit 插件,我需要知道为什么每当此代码运行时我都会出现延迟,我在我的系统上运行服务器,并且带有 hostgator 的 mysql 服务器是我的代码
openConnection();
try{
int level1 = 0;
if(playerDataConatinsPlayer(p)){
PreparedStatement sql = connection.prepareStatement("SELECT level FROM `player_data` WHERE player=?;");
sql.setString(1, p.getName());
ResultSet result = sql.executeQuery();
result.next();
level1 = result.getInt("level");
PreparedStatement levelUpdate = connection.prepareStatement("UPDATE `player_data` SET level=? WHERE player=?;");
levelUpdate.setInt(1, level1+1);
levelUpdate.setString(2, p.getName());
levelUpdate.executeUpdate();
levelUpdate.close();
sql.close();
result.close();
}else{
PreparedStatement newPlayer = connection.prepareStatement("INSERT INTO `player_data` values(?,0,1,0);");
newPlayer.setString(1, p.getName());
newPlayer.execute();
newPlayer.close();
}
}catch(Exception e1){
e1.printStackTrace();
}finally{
closeConnection();
}
这是我的 openconnection 方法
public synchronized static void openConnection(){
try{
connection = DriverManager.getConnection(""); //i know its empty cause i dont wanna give that info out
}catch(Exception e){
e.printStackTrace();
}
}
这是我的紧密连接
public synchronized static void closeConnection(){
try{
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
最佳答案
您可以采取一些措施来加快查询延迟:
如果您的应用是查询密集型应用,请使用持久连接并使其保持打开状态,而不是每次需要访问数据库时都打开新连接。
在本地运行 MySQL 服务器以加快连接时间。
对表的搜索字段(例如
player_data
上的player
)建立索引,以使搜索运行得更快。在配备 SSD 驱动器和大量 RAM 的功能强大的专用计算机上运行 MySQL 服务器,并在
my.cnf
上设置适当的参数(工作线程、最大进程数、最大进程数)连接数、内存限制、缓冲区大小),以利用 RAM 和处理能力并加快搜索和处理时间。像this question and answers之类的东西可能会帮助您进行内存设置,但您能做的最好的事情就是您自己进行详尽的在线研究和测试。做好功课!使用某种缓存系统来加快读取速度(例如 memcached)。
如果您的应用是数据密集型的并且必须支持大量连接,请获取更高的带宽,甚至考虑设置集群来平衡负载。
减少查询次数!不需要两次查询数据库来提升级别!
尝试:
if (playerDataContainsPlayer(p)){
PreparedStatement levelUpdate = connection.prepareStatement(
"UPDATE player_data SET level=level+1 WHERE player=?;"
);
levelUpdate.setString(1, p.getName());
levelUpdate.executeUpdate();
levelUpdate.close();
sql.close();
} else {
...
}
关于java - 为什么我的 Minecraft bukkit 插件出现 mysql 延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24274809/