MySQL en multithread pour MMORPG?
Bonsoir,
J'ai un serveur d'MMORPG en Java (open source) mal optimisé à ce qu'il parait. (Je ne suis pas le créateur, je cherche juste à l'optimiser un petit peu).
Le serveur tourne bien, chaque client a son propre thread, mais une fois plus de 600 joueurs se connectent, le serveur commence à rencontrer des lags quand il s'agit de requêtes MySQL.
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| public synchronized static ResultSet executeQuery(String query) throws SQLException
{
if(!_isInit)
return null;
Connection DB = _dynamiqueCon;
Statement stat = DB.createStatement();
ResultSet RS = stat.executeQuery(query);
stat.setQueryTimeout(300);
return RS;
} |
Après avoir jeter un coup d’œil sur le code j'ai vue cette fonction dans la class de base de donnés. C'est la fonction qui permet d’exécuter des requêtes MySQL, elle est très appelée dans le code. Elle doit être très optimisé à mon avis, help :(
Bref, etant donné que chaque client a son propre Thread, quand plus de 600 joueurs se connectent les requettes mysql se font une par une (à cause de: synchronized dans la fonction je pense).
J'aimerais savoir si je retire le "synchronized" dans la déclaration, est-ce que je risque des problèmes? Je veux que la fonction soit appelé plusieurs fois car le serveur dépends trop de MySQL pour sauvegarder les personnages à chaque fois.
Qu'est ce que je dois ajouter à la fonction pour qu'elle s'exécute en multhithreading sans problèmes ?
Go easy on me les gars, je députe en Java. ;)