.NET C# Java Javascript Exception

 | 
Frage stellen Fragen Themen Mitglieder Abzeichen RSS-Feed
0
Da ich gerade einen Server für ein Onlinespiel entwickle, suche ich nach einer sinnvollen Methode, wie ich Daten zentral leicht durchsuchbar speichern kann (nur zur Laufzeit, die persistente Speicherung erfolgt in einer MySQL-Datenbank). So muss ich z.B. eine Liste der Benutzer, die online sind, speichern, die sowohl nach der Datenbank-Id, als auch nach den Benutzernamen durchsuchbar sein muss. Bis jetzt habe ich dies mit 2 HashTables gemacht, einmal mit der Id als Schlüssel und einmal mit dem Benutzernamen. Das erscheint mir jedoch zu umständlich.

Da ich im Moment noch ziemlich am Anfang der Entwicklung stehe, kann ich auch noch tiefgreifendere Änderungen durchführen. Ich könnte auch die MySQL-Datenbank z.B. über einen objekt-relationalen-Wrapper stärker einbinden. Allerdings sollte die Performance möglichst hoch sein. Für die dauerhafte Speicherung möchte ich eigentlich auch weiterhin eine MySQL-DB benutzen, da ich dadurch einen externen Zugriff auf die Daten habe.
02.01.10
clonejo 134 1 5
clonejo 134 1 5
3 Antworten
2
Es ist schwierig, aus deiner Frage herauszulesen, was deine Anforderungen genau sind, insbesondere in dem Spieleumfeld. Zur Laufzeit sind Hashtables eine gute Lösung, weil sie schnellen Zugriff ermöglichen, nur beim Insert sind sie langsamer.

Ich würde dir auf jeden Fall empfehlen, eine Facade zu implementieren. Sie könnte z.B. die Methoden getUserById und getUserByName sowie addUser haben und diese dann auf deine HashTables anwenden. Dadurch ersparst du dir die mögliche Fehlerquelle, wenn du zwei Tabellen parallel pflegst.
05.01.10
1
Wenn du deine Daten auf zwei Arten ansteuern möchtest (nach DatabankId und Benutzernamen), dann brauchst du auch zwei Indexstrukturen dafür. Hashtabellen sind eine gute Wahl. Wenn du die MySql Datenbank hierfür verwenden würdest, würdest du dort zwei entsprechende Indices anlegen (diese entsprechen in etwa einer sortierten Liste, die per binary search durchsucht wird, also auch sehr schnell). Die MySql-Datenbank wird ca. 100x langsamer sein als deine in-memory hashtabelle. Schneller als die Hashtabelle wird es nicht gehen.
Ich empfehle dir, einen OR-Mapper einzusetzen und die Datenbanklösung zuerst zu versuchen, da du hierdurch weniger Aufwand hast (denn du brauchst ja auch Persistenz). Du kannst die Hashtabelle ja mehr als Cache und nicht als primären Speicherort der Daten ansehen. Im Notfall steigst du um.
Falls du keine Erfahrung mit OR-Mapping hast, wirst du einen halben Tag der Einarbeitung investieren müssen. Dieser wird sich für dich in Zukunft 10-fach auszahlen.
07.01.10
monad 28 2
0
Es erscheint mir am sinnvollsten weiterhin für jeden Schlüssel (z.B. Id, Name) jeder Klasse jeweils eine Hashtable zu benutzen. Ich sollte nur die Anfangskapazität hoch genug setzen.
02.01.10
clonejo 134 1 5
Deine Antwort
Entweder einloggen... ...oder ohne Wartezeit registrieren
Name
Passwort
Passwort wiederholen
E-Mail
Geworben von


Login mit OpenID

Mit einem OpenID-Account kannst Du dich auf allen Webseiten anmelden, die OpenID unterstützen. Du hast bereits ein Benutzerkonto bei einem der folgenden Provider? Dann kannst Du dich direkt hier damit registrieren.


OpenID-Provider anklicken: