mmofacts.com

Sinnvolle aufteilung einer mysql-datenbank

gepostet vor 19 Jahre, 8 Monate von Jackk
hallo,

mein online-spiel soll später aus mehreren kleinen einzelspielen bestehen (20 spieler pro spiel, die anzahl der einzelspiele ist unbegrenzt). es gibt aber auch eine ebene im spiel, welche die spieler aller einzelspiele in einem großen spiel verbindet. ich arbeite mit php & mysql-db.

die große frage dazu lautet:

ist es sinnvoller, wenn ich in der mysql-datenbank für jedes einzelspiel eine tabelle anlege (in wirklichkeit sind es natürlich mehrere tabellen pro spiel, aber der einfachheit halber...). oder sind die abfragen schneller, wenn ich alles in einer "globalen" tabelle zusammenfasse?

anders gesagt: wenn ich z.b. beim login die spielerdaten abfragen möchte, geht es dann schneller, wenn der server erst in vielen tabellen (evtl. ein paar hundert), aber danach in wenigen datensätzen (20-100) suchen muss. oder wenn er in wenigen tabellen (ca. 4), aber dafür in vielen datensätzen (ca. 2.000-50.000) sucht?


schonmal danke, falls mir da jemand weiter helfen kann
gepostet vor 19 Jahre, 8 Monate von neit
Mach um Himmels Willen nicht für jedes Spiele ne neue Tabelle auf, das einzige was dir das bringt ist ein riesiges Chaos.
gepostet vor 19 Jahre, 8 Monate von troopers
bestätige das wäre warnsin den überblick da zu behalten kanst fast vergessen (ausgnommen du bist masoshistich veranlagt)

leg lieber eine tabelle an und nehm ID als index die das spiel kenzeichnet
alleine vom platz soltest da sehr viel sparen könen
gepostet vor 19 Jahre, 8 Monate von Kampfhoernchen
Jep. Da haben sie recht. Und wenn du in die Abfrage WHERE spiel_id = x einbaust, kostet dich das so gut wie keine Zeit.
gepostet vor 19 Jahre, 8 Monate von TheUndeadable
Wenn man davon ausgeht, dass man einen Index draufgesetzt hat
gepostet vor 19 Jahre, 8 Monate von Jackk
danke für die tipps. dann werde ich es wohl so machen...
gepostet vor 19 Jahre, 8 Monate von Jackk
ich brauch nochmal eure hilfe, es geht aber um was anderes...

eigentlich dachte ich ja, ich wäre mit dem thema durch, aber wie macht man eigentlich sichere und trotzdem möglichst einfache sessions? ich habe nämlich das problem, dass meine php-sessions nicht funktionieren bei usern, die den internet explorer benutzen und eine höhere sicherheitsstufe eingestellt haben als "niedrig". und deswegen muss ich unbedingt was ändern.

so ist es jetzt noch bei mir (mit php & mysql):
auf jeder seite steht als erstes session_start. nach dem login speicher ich als einzige session-variable den spieler-namen (mit session_register()), um die session dem spieler zuordnen zu können. der spielername wird dann bei mir auch standardmäßig am anfang jeder seite aus der session ausgelesen und daran orientiere ich mich dann. aber wie bereits erwähnt, macht der internet explorer das selbst in der sicherheitsstufe "mittel" nicht mit.

wie mache ich das ohne probleme und sicher? es geht ja vielleicht auch ohne php-sessions (über die datenbank?)

ich hoffe, ich konnte das problem einigermaßen gut beschreiben.
gepostet vor 19 Jahre, 8 Monate von Roi
Cookies erlaubt?
gepostet vor 19 Jahre, 8 Monate von Michaelius
Du solltest nicht nur den Spielernamen in deiner Session eintragen sondern auch sonstige Prüfmuster.

Von Cookies würde ich komplett abraten, da zu sehr unsicher. Ein Cookie kann jeder hacken. Das heisst aber auch das die Session immer nach einem Klick in deinem Spiel automatisch aktualisiert werden muss.
gepostet vor 19 Jahre, 8 Monate von TheUndeadable
@Obenstehenden:
Wie willst du die Sessiondaten ohne Cookie-Daten über mehrere Requests verfolgen?

Mit einer ID an jedem Link? Das ist genauso unsicher.
Im Cookie sollte eigentlich nur ein Session-Identifier stehen (lang genug natürlich) über welchem die Session-Daten dem Client zugeordnet werden. Ist dieser Identifier lang genug und wird sogar noch mit einem IP-Check verbunden, so ist ein Session-Hijacking nahezu ausgeschlossen.

Ob du die Session-Daten von PHP verwalten lässt oder selbst verwaltet, sei dir überlassen.
Um sie selbst zu verwalten, schau dir die Befehle getcookie und setcookie an. Ich persönlich habe bei meinem Projekt die Sessions selbstverwaltet, aber das hätte ich genauso gut lassen können, da es für mich keinen Vorteil ergab.
gepostet vor 19 Jahre, 8 Monate von Roi
Original von Michaelius
Du solltest nicht nur den Spielernamen in deiner Session eintragen sondern auch sonstige Prüfmuster.

Von Cookies würde ich komplett abraten, da zu sehr unsicher. Ein Cookie kann jeder hacken. Das heisst aber auch das die Session immer nach einem Klick in deinem Spiel automatisch aktualisiert werden muss.


Naja, unsicher...
Du hast 2 Möglichkeiten für eine Session: Cookies oder URL.

Cookies kann man manipulieren kein Ding, aber die Session-ID in der URL ist wohl noch einfacher und schneller möglich ^^
Vor allem, wenn dann mal wer seinen Link weitergibt.
Um eine Überprüfung der IP wirst du also so oder so nicht herumkommen.

Insofern finde ich die Variante mit dem Cookie sinnvoller.
So sieht auch nicht jeder direkt die Session-ID, kann sie nicht unbeabsichtigt weitergeben und Session-VARs liegen eh nur auf dem Server..
gepostet vor 19 Jahre, 8 Monate von Jackk
Teil1:
------

also, mal etwas zum verständnis:

mit session_register und session_unregister setzt man cookies relativ einfach, weil php diese dann selbst verwaltet. das gleiche kann man jedoch mit setcookie und getcookie (etc.?) machen, nur das man das ganze dann selber genauer steuern kann. ist das richtig oder hat das, was man mit session_register macht, gar nichts mit cookies zu tun?


Teil2:
------

ansonsten weiß ich glaube ich jetzt, wie ich das mache (ungefähr so, wie TheUndeadable das beschrieben hat). also ich speichere nach dem login nicht den spielernamen in dem cookie, sondern ich speichere die session-id (= session-identifier) in der datenbank und lösche diese bei logout wieder. ich bin mir zwar noch nicht sicher, ob der internet explorer das dann endlich in seine "sicherheitsstufe mittel" einordnet (weil ja keine persönlichen daten mehr als cookie gespeichert werden), aber in dem fall geht glaube ich probieren über studieren...

macht das sinn, oder hab ich jetzt totalen müll erzählt?


Teil3:
------

was genau ist denn ein ip-check? bedeutet das, man prüft bei jedem link innerhalb einer session, ob die ip gleich geblieben ist? aber ich hab hier doch irgendwo in diesem forum mal gelesen, dass es user gibt, die bei jedem klick eine andere ip haben...
gepostet vor 19 Jahre, 8 Monate von Global
3:

du kannst ja in den optionen oder beim login ein kästchen ip-check an/aus machen
gepostet vor 19 Jahre, 8 Monate von Roi
Original von Jackk
Teil1:
------

also, mal etwas zum verständnis:

mit session_register und session_unregister setzt man cookies relativ einfach, weil php diese dann selbst verwaltet. das gleiche kann man jedoch mit setcookie und getcookie (etc.?) machen, nur das man das ganze dann selber genauer steuern kann. ist das richtig oder hat das, was man mit session_register macht, gar nichts mit cookies zu tun?

Ähm, session_register hat kaum was mit Cookies zu tun, ich empfehle da einfach mal www.php.net
Da kann man sich das sogar in dt. durchlesen.
getcookie??? Warum nicht $_COOKIE['blabla']?
gepostet vor 19 Jahre, 8 Monate von Jackk
@roi:

danke, die seite hat mir geholfen. es hat sich herausgestellt, dass ich die cookie-funktionen gar nicht brauche (ich arbeite nur mit session_start() und session_id())



@global:

Original von Global

3:

du kannst ja in den optionen oder beim login ein kästchen ip-check an/aus machen

in den optionen ist es schlecht, weil man dann als benutzer nichts mehr machen kann, wenn man den ip-check angestellt hat und trotzdem (ohne, dass man es vorher wusste) bei jedem klick eine neue ip hat.

und beim login ist mir das auch zu blöd. dann muss da drunter ja noch ein ziemlich langer erklärungstext zum ip-check stehen. und sowas schreckt benutzer ab...


was sind denn das überhaupt für verbindungen, bei denen sich die ip bei jedem klick verändert? und bei wie vielen benutzern ist das so?
gepostet vor 19 Jahre, 8 Monate von Roi
Sind sogenannte Anonymizer...
Da hast dann eine Liste von Proxys und er hüpft wild zwischen den Dingern hin und her...
Als Bsp
gepostet vor 19 Jahre, 8 Monate von TheUndeadable
AOL-Benutzer ebenfalls, da sie einen Multi-Proxy nutzen
gepostet vor 19 Jahre, 8 Monate von Jackk
na dann danke für die info. für den ip-check muss ich dann wohl noch einen kompromiss finden.

aber ansonsten brauche, was diesen thread betrifft, glaube ich keine hilfe mehr
gepostet vor 19 Jahre, 8 Monate von Cays
Hallo!

Nochmal zu dem eigentlichen Grund dieses Themas....
Warum ist es unübersichtlich für jedes Spiel eine Tabelle zu machen?? Ich arbeite im meinem BG auch nach dem Prinzip, dass jeder der will sich ein Spiel registriert und somit eine neue MySQLTabelle anlegt. Aber ich speichere die Werte über die anzahl der einheiten/Gebäude beziehungsweise was erforscht wurde in einer seperaten Tabellle. Auch die Spiele stehen in einer Tabelle. (Dort steht z.B. wie viele Punkte man benötigt um zu gewinnen. Und hier wird später der Gewinner eingetragen!)
Ich hatte bis jetzt noch nie Probleme mit der Übersicht!
MfG.Cays

Auf diese Diskussion antworten