kostenloser Webspace werbefrei: lima-city


Wird mysql stark langsamer bei zu vielen Spalten?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    nyn

    nyn hat kostenlosen Webspace.

    Hi

    Ich arbeite zurzeit an einem Browsergame, in dem es eine Art Questsystem gibt. Insgesamt soll es etwa 80 Quests geben.
    Natürlich muss irgendwo verzeichnet werden, ob der Quest bereits abgeschlossen wurde. Meine Idee wäre einfach, in der Tabelle für die Benutzer für jeden Quest eine Spalte anzulegen als Boolean (also abgeschlossen oder nicht abgeschlossen). Ich habe allerdings noch nicht besonders viel Erfahrung mit soetwas, würden die 80 zusätzlichen Spalten das alles zu stark verlangsamen oder ist das noch ok?
    Andernfalls würde ich vielleicht eine seperate Tabelle dafür anlegen mit den Spalten "id, userid, questid", und sobald etwas eingetragen wurde, so ist es auch abgeschlossen.

    Was wäre schneller bzw. effektiver, oder hättet ihr eine bessere Idee?

    LG, nyn
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Das mit der zweiten Tabelle wäre der Übersichthalber schon besser.
    Wenn du es in die Benutzertabelle mit schreiben willst dann lege dir doch einfach eine Spalte an und zähle diese mit jeder bestandenen Quest hoch?
    5 - Quest 6 ist dran, 47 - Quest 48 ist dran usw usw
  4. Wenn die Quests nur in einer Reihenfolge durchgeführt werden können und sollen, ist die Lösung mit dem Hochzählen in der Benutzertabelle am besten, da hierbei nicht mehrere Tabellen aufgerufen und abgefragt werden müssen.

    Falls Du Dir das aber so gedacht hast, dass eine beliebige oder zumindest flexiblere Reihenfolge gestattet sein soll, wirst Du so nicht weit kommen. Du könntest dann mit Binärwerten arbeiten, aber ich denke, dass es dann auch eine zweite Questtabelle tun wird.
  5. g****e

    Jo, also entweder das hochzählen, oder, wenn untereinander Abhängigkeiten bestehen sollen (Quest 4 und 7 gelöst, dann kommt Quest 11), kannst du einfach eine Tabelle erstellen die so etwa ausssieht:

    questSolved
    id userId questId
    0 1 0
    1 3 0

    usw. Damit würdest du dann wissen, welche abgeschlossen sind. In einer Zweiten Tabelle liegen dann die Quests:
    quests
    questId questName otherData
    0 'erste Schritte' alles andere

    Und du hast eine dritte Tabelle mit den Bedingungen, wann welche Quest angefangen werden darf
    questRequirements
    id questId requiredQuests
    0 0 ' '
    1 1 '0'
    2 2 '0-1'

    Dann kannst du in der Spalte requiredQuests ein Array abspeichern (mittels implode / explode). Hier kannst du jetzt auch weitere Spalten hinzufügen, mit sowas wie "requiredResearch" , "requiredConstruction", um das System flexibel zu halten.

    So hätte ich das ganze gelöst. Es ist sehr flexibel, und egal was du damit vorhast, es wird dir eigentlich genug Spielraum lassen.

    Viel Spaß und liebe Grüße
  6. Autor dieses Themas

    nyn

    nyn hat kostenlosen Webspace.

    Ok danke für die Antworten :D
    Da die Quests einigermaßen unabhängig voneinander laufen sollen, werde ich dann eine seperate Tabelle anlegen.
    Da allerdings es schwer sein wird, die Bedinungen zum Erfüllen des Quests in einer Datenbank zu speichern, (da sollten dann schon PHP-Funktionen definiert werden, die die Verfügbarkeit zum absolvieren des Quests prüfen) werde ich in einem Ordner dann für jeden Quest eine Datei anlegen, die die Informationsdaten des Quests beinhaltet, sowie Funktionen zum prüfen und absolvieren des Quests.

    LG
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!