Biene_Maja: Datenbank Design

Hallo,

ich plane gerade ein Programm das Aktiendaten periodisch aus dem Inet holt. Die Daten sollen in eine DB gespeichert werden (MySql). Normalerweise würde ich eine Tabelle mit den Feldern "Aktiename", "Datum", "Preis" erstellen. Nur würde das ja auf die Dauer unglaublich langsam werden, wenn ich eine bestimmte Anzahl an Daten in der Tabelle habe und nur einen Teil der Daten brauche. Deswegen dachte ich mir ich speicher die Daten pro Tabelle, mache also für jede Aktie ne eigene Tabelle ala ford_data_table, siemens_data_table, etc .. . Nur ist das ja etwas unschön, gibt es da noch eine andere Möglichkeit ?

MfG

Biene_Maja

  1. Moin,

    ich plane gerade ein Programm das Aktiendaten periodisch aus dem Inet holt. Die Daten sollen in eine DB gespeichert werden (MySql). Normalerweise würde ich eine Tabelle mit den Feldern "Aktiename", "Datum", "Preis" erstellen. Nur würde das ja auf die Dauer unglaublich langsam werden, wenn ich eine bestimmte Anzahl an Daten in der Tabelle habe und nur einen Teil der Daten brauche.

    nein, dass sollte kein Problem sein. Datenbanken sind genau auf dieses Szenario hin optimiert. Je nach Server und DBMS solltest du erst bei einigen 100000 bis Millionen Datensätzen ein Performence-Problem bekommen.

    Was du dir eventuell überlegen solltest ist, ob es wirklich MySQL sein muss, oder ob nicht eventuell PostgreSQL oder eine andere DB in Frage kommt. Oder ob du das ganze gleich so implementierst dass du das verwendeter RDBMS austauschen kannst, ohne was am Code zu ändern.

    Als andere Alternative könntest du dir noch überlegen, ob es für deinen Anwendungsfall eventuell Sinn macht statt einer relationalen DB wie MySQL oder PostgreSQL eine schemalose DB wie z.B. CouchDB zu verwenden.

    Beste Grüße

    Stareagle

    1. Hi,

      ich plane gerade ein Programm das Aktiendaten periodisch aus dem Inet holt. Die Daten sollen in eine DB gespeichert werden (MySql). Normalerweise würde ich eine Tabelle mit den Feldern "Aktiename", "Datum", "Preis" erstellen.

      Als andere Alternative könntest du dir noch überlegen, ob es für deinen Anwendungsfall eventuell Sinn macht statt einer relationalen DB wie MySQL oder PostgreSQL eine schemalose DB wie z.B. CouchDB zu verwenden.

      Die genannten Daten sind aber extrem schematisch, also sehe ich hier keinen Vorteil in einer NoSQL-Datenbank, eher nur Nachteile.

      MfG ChrisB

      --
      RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    2. moin,

      nein, dass sollte kein Problem sein. Datenbanken sind genau auf dieses Szenario hin optimiert. Je nach Server und DBMS solltest du erst bei einigen 100000 bis Millionen Datensätzen ein Performence-Problem bekommen.

      alleine das vorhanden sein von millionen von datensätze bedeutet noch kein performance problem. das wäre eine viel zu allgemeine aussage

      Ilja

  2. Hallo,

    "Aktienname" impliziert einen String, Varchar oder so. Das empfiehlt sich aufgrund des Speicherverbrauchs nicht wirklich wenn man ca. 10mio datensätze speichern will.

    10 Millionen Datensätze in einer Tabelle stellen aber grundsätzlich kein wirkliches Problem dar (10'000'000 x 100 bytes pro Record = 1'000'000'000 bytes = 1'000'000 kilobytes = 1'000 Megabytes = 1 Gigabyte *),

    Die hauptsächliche Frage ist: Was willst du mit den Daten in der Datenbank anfangen und "wie schnell".

    wenn ich eine bestimmte Anzahl an Daten in der Tabelle habe und nur einen Teil der Daten brauche

    Dabei hilft passende Indexierung.

    Was du im übrigen vorschlägst mit ford_data_table, siemens_data_table kann man als "horizontale" Partitionierung bezeichnen. Ja, es ist ein Weg zur Optimierung von Datenmengen. Aber nur wenn das Datenbanksystem diese genauso sieht. Ansonsten machst du dir mehr Scherereien als du willst.

    Ciao, Frank

    * ja ja ich weiss 1024 und so

  3. Hallo,

    ich plane gerade ein Programm das Aktiendaten periodisch aus dem Inet holt. Die Daten sollen in eine DB gespeichert werden (MySql). Normalerweise würde ich eine Tabelle mit den Feldern "Aktiename", "Datum", "Preis" erstellen. Nur würde das ja auf die Dauer unglaublich langsam werden, wenn ich eine bestimmte Anzahl an Daten in der Tabelle habe und nur einen Teil der Daten brauche. Deswegen dachte ich mir ich speicher die Daten pro Tabelle, mache also für jede Aktie ne eigene Tabelle ala ford_data_table, siemens_data_table, etc .. . Nur ist das ja etwas unschön, gibt es da noch eine andere Möglichkeit ?

    Ob eine Normalisierung (Verteilung auf mehrere Tabellen) erforderich ist, hängt sowohl von der Struktur der gelieferten Daten als auch von den Abfragen ab, die gemacht werden sollen. Auf den ersten Blick ("Aktiename", "Datum", "Preis") spricht das eher für _eine Tabelle, ggf. ist "Aktienname" zu atomizen (mehrere Felder).

    Je nach Aufgabenstellung (Zeitfenster) kannst Du die Tabelle klein halten und beispw. Daten mit Verfallsdatum löschen oder anderweitig wegschreiben (Trigger).

    Hotti