Hi,
ich habe eine Datenbank-Design Frage:
In meinem Browsergame wird es eine Börse geben. Und für die Börse brauch ich eine Statistik.
Wie soll ich nun am Besten die Daten der einzelnen AG's in der Datenbank speichern ?
-Soll ich für jede Stunde des Jahres eine extra Spalte anlegen:
dann bin ich bei rund 8.600 Spalten .. das ist nicht so toll
- oder für jeden Monat eine neue Tabelle anlegen, das wären 744 Spalten
Oder soll ich ein ganz anderes Schema machen:
- Das ich in eine Stat-Tabelle einmal die Werte im 1/4-Stunden Takt aufzeichne, dann daraus der Mittelwert, und dann in eine Stundentabelle, eine Tag-Monat-Jahr-Tabelle wäre die logische Fortsetzung davon.
Ich persönlich kann mich mit der letzten Methode irgendwie nicht so anfreunden....
...Vielleicht kann mir ja jemand mit mehr Erfahrung als ich helfen....Thx
mfg Rob-oter
Frage zu Datenbankdesign
gepostet vor 19 Jahre, 9 Monate von Rob-oter
gepostet vor 19 Jahre, 9 Monate von Sogil
Wenn du für jede AG für jede Stunde einen Wert hast, den du behalten möchtest sind das halt extrem viele Daten. Und ohne eine Grosse Tabelle wirst du da nicht auskommen.
gepostet vor 19 Jahre, 9 Monate von Rob-oter
Nun ja, also ich hab eigendlich nicht vor, das jede Stunde ein Wert gespeichert wird. Aber ich wollte euch Fragen, was sinnvoll wäre ?
Also welche Werte speichern, und in welcher Datenbank-Struktur ?
Also welche Werte speichern, und in welcher Datenbank-Struktur ?
gepostet vor 19 Jahre, 9 Monate von KEEN
In zeitlichen Abständen neue Tabellen oder Spalten anzulagen ist der absolut verkehrte Weg.
Bleib bei deiner einen Tabelle, erstelle darin eine Spalte mit einer Datumsangabe. Etwa so:
id | datum | stunde | produkt | preis | umsatz
Angenommen du hast in deiner Börse 40 Produkte, und speicherst jede Stunde ihren preis und umsatz, dann hast du nach einem Jahr gut 350.000 Einträge (Zeilen) was aber dank einem Index auf dem Datum+Stunde überhaupt kein Problem ist.
Bleib bei deiner einen Tabelle, erstelle darin eine Spalte mit einer Datumsangabe. Etwa so:
id | datum | stunde | produkt | preis | umsatz
Angenommen du hast in deiner Börse 40 Produkte, und speicherst jede Stunde ihren preis und umsatz, dann hast du nach einem Jahr gut 350.000 Einträge (Zeilen) was aber dank einem Index auf dem Datum+Stunde überhaupt kein Problem ist.
gepostet vor 19 Jahre, 9 Monate von Rob-oter
Du meinst, ich soll das Datum der Transaktionen nur Festhalten, und daraus dann berechnen, wie hoch der Kurs ist ?
Also ich glaube, wir verstehen uns unter "Börse" falsch....Ich meine wo Wertpapiere von Firmen gehandelt werden ....
mfg Rob-oter
Also ich glaube, wir verstehen uns unter "Börse" falsch....Ich meine wo Wertpapiere von Firmen gehandelt werden ....
mfg Rob-oter
gepostet vor 19 Jahre, 9 Monate von BLUESCREEN
Original von Rob-oter
Du meinst, ich soll das Datum der Transaktionen nur Festhalten, und daraus dann berechnen, wie hoch der Kurs ist ?
Davon hat er nirgends was geschrieben.
Original von Rob-oter
Also ich glaube, wir verstehen uns unter "Börse" falsch....Ich meine wo Wertpapiere von Firmen gehandelt werden ....
Und ich glaube, deine Frage ist nicht eindeutig genug formuliert.
Dass du eine Statistik brauchst und wissen willst in welcher Form die Daten gespeichert werden sollten ist klar.
Aber darüber, wie viele Daten in welchen Zeitabständen anfallen schreibst du nichts konkretes, sondern gibst zwei sich weidersprechen Beispiele (einmal mit 1 Stunde und einmal mit 15 Minuten).
Auch wie genau die Statistik aussehen soll schreibst du nicht (brauchst du einen exakten Gesamtverlauf/eine groben Verlauf/die Daten der letzten x Stunden?)...
In jedem Post zu dem Thema kommen andere Begriffe dazu - erst geht es um AGs und Werte, dann plötzlich um Transaktionen und Kurse!?
Ich vermute jetzt einfach mal, dass jede Stunde zu jeder AG eine Zahl anfällt und diese in Form einer Statistik später angezeigt werden sollen.
Dann würde ich die Daten in etwa so speichern, wie KEEN es beschrieben hat. Auf jeden Fall alles in eine Tabelle.
gepostet vor 19 Jahre, 9 Monate von Rob-oter
ok,
ich werde versuchen, es nocheinmal genau zu erklären, wobei ihr ja schon einen guten Vorschlag gemacht habt....
In meinem Spiel können Spieler AG's gründen. Jeder Spieler kann sich Aktien dieser AG's kaufen (und verkaufen). Dadurch variiert der Wert der Firma.
jetzt meine Frage:
* Wie oft soll ich den Wert der AG's speichern ? (sodass man eine Kursentwicklung gut feststellen kann, und sich auch im nachhinen (also 5 Monate später) sich noch den Verlauf des Kurses ansehen kann)
* Wie kann ich sinnvoll die Daten in einer Datebank unterbringen, damit die Performance nicht leidet. ?
mfg Rob-oter
ich werde versuchen, es nocheinmal genau zu erklären, wobei ihr ja schon einen guten Vorschlag gemacht habt....
In meinem Spiel können Spieler AG's gründen. Jeder Spieler kann sich Aktien dieser AG's kaufen (und verkaufen). Dadurch variiert der Wert der Firma.
jetzt meine Frage:
* Wie oft soll ich den Wert der AG's speichern ? (sodass man eine Kursentwicklung gut feststellen kann, und sich auch im nachhinen (also 5 Monate später) sich noch den Verlauf des Kurses ansehen kann)
* Wie kann ich sinnvoll die Daten in einer Datebank unterbringen, damit die Performance nicht leidet. ?
mfg Rob-oter
gepostet vor 19 Jahre, 9 Monate von BLUESCREEN
Original von Rob-oter
* Wie oft soll ich den Wert der AG's speichern ? (sodass man eine Kursentwicklung gut feststellen kann, und sich auch im nachhinen (also 5 Monate später) sich noch den Verlauf des Kurses ansehen kann)
Hier kommt es natürlich auf das Spiel an... Wenn es vom Spiel her wichtig ist, in dieser Statistik die Änderungen jeder Stunde zu sehen, dann musst du eben jede Stunde die Daten speichern.
Ansonsten würde ich sagen einmal pro Tag. Wenn man nämlich einen Wert pro Stunde hat, dann ist die Statistik von 5 Monaten schon mindestens 3600 Pixel breit.
Bei einem Wert pro Tag könntest du die Werte bei der Anzeige etwas auseinanderziehen, so dass man einen guten Verlauf hat und dann kannst du ja etwas rumprobieren, z.B. mit zwei Werten pro Tag...
Original von Rob-oter
* Wie kann ich sinnvoll die Daten in einer Datebank unterbringen, damit die Performance nicht leidet. ?
Wie gesagt auf jeden Fall alles in eine Tabelle und dann ist wieder die Frage, wie viele zusätzliche Informationen du außer einer Spalte für die AG und einer Spalte für den Wert brauchst. Wenn in der Statistik keine Daten angezeigt werden dann musst du ja auch keine Daten speichern und sparst so Platz. Auch wissen wir nicht, welchen Datentyp du für welche Spalte planst.
Egal was du da vorhast denke ich, dass das alles kein Problem ist - im Zweifelsfall wird die Tabelle eben einige MB groß...
gepostet vor 19 Jahre, 9 Monate von Qmaster
Für die Statistik würde ich die Daten täglich ablegen. Da es ja um Börse geht bieten sich übliche Formate für Kurse an. Angenommen deine Börse hat von 8 bis 20 Uhr auf.
Open ( Kurs um 8 Uhr)
Close ( Kurs um 20 Uhr)
High ( Höchster Kurs am Tag)
Low ( tiefster Kurs am Tag)
Daraus lassen sich so ziemlich alle Kursdarstellungen generieren. Kerzen und Balkencharts um die wichtigsten zu nennen.
Open ( Kurs um 8 Uhr)
Close ( Kurs um 20 Uhr)
High ( Höchster Kurs am Tag)
Low ( tiefster Kurs am Tag)
Daraus lassen sich so ziemlich alle Kursdarstellungen generieren. Kerzen und Balkencharts um die wichtigsten zu nennen.
gepostet vor 19 Jahre, 9 Monate von KEEN
Ich bin mir nachwievor nicht ganz sicher, was du genau willst. Aber von der Performance wäre es überhaut kein Problem jede einzelne Transaktion in der Statistik zu speichern. Wenn du nur Zahlen IDs nimmst, und den Index gut setzt, machen ein paar Millionen Einträge auch keine Problem, das ist eben das geniale an Datenbanken.
id | timestamp | produkt | preis | umsatz
z.B. Index auf timestamp und Produkt. Auch wenn du es für das Spiel nicht umbedingt brauchst, empfehle ich dir mal ein Buch über MySQL zu lesen, du wirst staunen was man damit alles machen kann, und dazu noch sehr schnell.
id | timestamp | produkt | preis | umsatz
z.B. Index auf timestamp und Produkt. Auch wenn du es für das Spiel nicht umbedingt brauchst, empfehle ich dir mal ein Buch über MySQL zu lesen, du wirst staunen was man damit alles machen kann, und dazu noch sehr schnell.