Base de données pour un serveur (de jeu)
Bonjour,
J'ai un jeu en C++ sur lequel il est courant d'avoir 150 joueurs connectés sur le serveur principal, et j'en attend plus dans le futur (aux environ de 500, voire plus) ^^. Le problème est que je ne suis pas sûr que les moyens mis en place conviennent toujours avec cette croissance.
J'ai pour l'instant un fichier de 15000 utilisateurs, comprenant peu d'info sur chaque joueur (login, salt du mdp, hash du mdp, ip, derniere date de login, + 3 octets). En gros, environ 100 octets par utilisateur.
La solution que j'utilise maintenant est d'avoir toute la base de données en mémoire (pour info le fichier texte/csv fait 1,5 MO). Pour les mises à jour du fichier, la position de chaque utilisateur est stockée en mémoire et le fichier est constamment ouvert pour effectuer tout ça rapidement.
Mais j'aimerais éviter d'avoir un stockage en mémoire proportionnel au nombre d'utilisateurs stockés.
J'ai pensé à faire d'autre systèmes comme un cache des derniers 10000 utilisateurs, gérer le reste dans des fichiers triés tous les jours avec des index pour éviter de parcourir tout le fichier à la fois, etc. Mais je me suis dit qu'il serait peut-être plus judicieux d'utiliser quelque chose de déjà existant et maintenu, dont je n'ai plus à m'occuper.
La principale crainte que j'ai avec MySQL est que ce puisse être lent, beaucoup plus lent que mon système actuel. De plus je n'ai pas besoin du modèle relationnel du tout, c'est pour ça que je vous demande si vous connaissez un système de base de données, performant :p, et qui ne s'appuie pas forcément sur un modèle relationnel (car j'en ai pas vraiment besoin, je veux juste récupérer les infos d'un membre à partir de son nom, c'est tout ce que je demande au système), interfaceable facilement avec du C++ et multi-plateforme. Si vous me dites que MySQL est le meilleur choix, je serais forcé de vous croire, mais je suis pas convaincu...
J'ai entendu parler de systèmes comme Cassandra ou No Couch DB, c'est pour cela que je m'interroge sur la nécessité du SQL dans ce cas-ci.
Merci d'avance!!