C# MySQL Database Update interval in Simulation Spiel

Gotenks666

Ensign
Registriert
Mai 2009
Beiträge
165
Guten Tag liebe Computerbase Community,

Ich stehe vor folgenden Problem und finde keine passende effektive Lösung dazu.

Ich erstelle gerade ein Online Simulations Spiel alâ "Ikariam", "Clash of Clans" etc für Android mittels Unity3D. Den dazugehörigen Server habe ich mittels C# TCP Connection erstellt außerhalb Unity natürlich um mein eigenes Netzwerk Framework zu erstellen.

Nun stehe ich vor einer Entscheidung bezüglich der Simulation und MySQL. Der Spieler bekommt z.B jede 10 Sekunden + 10 Gold. Nun kann ich ja nicht den Server jede 10 Sekunden jeden Spieler in der Datenbank aktualisieren bei übertriebener weise gesagt bei 10.000 Spieler ein wenig zuviel oder?

Mein zweiter Gedanke ist für mich auch ein wenig logischer dennoch denke ich nicht die beste Lösung:
Beim start des Servers, lädt der Server jeden Spieler und ihre Daten von der MySQL Datenbank in den Server, und hält die Simulation im Server ohne alle 10 Sekunden die Datenbank zu öffnen und zu aktualisieren. So könnte ich jeden Spieler alle 10 Minuten in die Datenbank speichern lassen bzw wenn ich den Server herunter fahre speichert er alle Spieler in die Datenbank.

Gäbe es denn noch eine weitere weise es effizienter zu realisieren?

Vielen dank für euren Rat im voraus !
 
Datenbank auf dem Server in den RAM nicht auf der Disk.
Du sammelst die Spielerdaten lokal also 60 Gold in ein Paket, das wird dann jede Minute an den Server gesendet. Sobald die App geschlossen wird, wird das bis dahin gesammelte Paket übertragen. Oder sobald der Spieler versucht das Gold zu verwenden, muss das gesammelte Paket erst an den Server übertragen werden und dann kann er sein Gold ausgeben.


Warum benutzt du Unity? Warum Mysql? Sehr zweifelhafte design decisions wenn du mich fragst. An deiner Stelle hätte ich HTML5 + Javascript/Typescript und eine NoSQL Datenbank wie ArangoDB verwendet..
 
Zuletzt bearbeitet:
Die frage ist ja, der Spieler sammelt alles und sendet das Paket zum Server. Der Spieler kann das Paket manipulieren was gesendet wird somit werden falsche Daten zum Server gesendet. Wenn das Smartphone ausgeht kann somit kein Paket mehr gesendet werden und somit ist alles hinüber.

Rein theoretisch möchte ich die Simulation nur im Server so dass der Spieler nur die Information vom Server bekommt.
 
Dann ist es doch das selbe nur umgedreht. Der Server sammelt 1 Minute nen Paket zusammen und schickt es an den Client für die Synchronisation. Lokal läuft der Counter dann mittels lokaler Zeit und wird jede Minute mit Hilfe des Server Pakets abgeglichen. Mit SQL kommste da eh nicht weit. Das ist nicht für große Datenaufkommen gedacht. Die ganzen Hipster frickeln nur noch mit Couch, Mongo und vorallem ArangoDB herum.
 
Aktualisiere den Goldzähler nicht ständig, sondern nur, wenn er benötigt wird. Speichere dafür den letzten Aktualisierungszeitpunkt mit ab. Jedes Mal, wenn das System wissen muss, wieviel Gold der Spieler hat, rechne nach, wieviel er seitdem dazubekommen hat.

Sollte sich die Goldzuwachsrate ändern, musst du in diesem Moment natürlich den Goldstand neu berechnen, sonst geht die Rechnung nicht auf.
 
NullPointer schrieb:
Aktualisiere den Goldzähler nicht ständig, sondern nur, wenn er benötigt wird. Speichere dafür den letzten Aktualisierungszeitpunkt mit ab. Jedes Mal, wenn das System wissen muss, wieviel Gold der Spieler hat, rechne nach, wieviel er seitdem dazubekommen hat.

Sollte sich die Goldzuwachsrate ändern, musst du in diesem Moment natürlich den Goldstand neu berechnen, sonst geht die Rechnung nicht auf.

Vielen dank ! Genau den Weg habe ich gesucht!
 
Zurück
Oben