Wann "platzt" MySQL?
Kalle_B
- datenbank
Hallöle,
habe eine Software für einen Messebetreiber geschrieben. Das Konzept ist, dass zwischen Ausstellern und angemeldeten Besuchern Gesprächstermine vereinbart werden.
Der Besucher bekommt einen "Stundenplan", seine Zeit ist optimal ausgelastet.
Nun "spinne" ich mal: Das Konzept könnte doch auch für eine größere Messe, etwa die IAA oder gar die Hannovermesse interessant sein.
Hat von euch schon mal jemand eine MySQL Datenbank zum "Platzen" gebracht? Wieviele Datensätze - oder GB - kann die verkraften?
Mein jetziges Datenvolumen (2,7 MB) ist Spielkram:
* 26 Events (Workshops, Vorträge, Talkrunden, Mittagessen),
* 33 Slots, die Zeiteinheiten des Forums,
* 118 Mitarbeiter von Ausstellern,
* 465 Besucher,
* 2.061 Eventwünsche und -buchungen (alle erfüllt),
* 6.700 Gesprächswünsche, davon 2.632 erfüllt,
* 13.452 Anwesenheitseinträge (Slots der Personen),
aber wie sieht die 10.000- fache Menge aus?
Liebe Grüße, Kalle
Hallo,
Irgendwann ab 4,2 Bilionen Zeilen auf einem 32bit System, wenn du aber ein 64bit System anwendest kann sie wirklich noch einen mega haufen größer werden AFAIR. Ich denke bevor du das erreichst platzt eher die Festplatte ;-)
Grüße
Jeena Paradies
... für eure Antworten.
Dann habe ich ja wirklich noch etwas Luft ...
@Robert
OK, ich hätte es genau andersherum gemacht: Der Aussteller bekommt einen Terminkalender, aber weiter im (Kon-)Text …
Bekommt er ja auch.
Kalle
Hallo Freunde des gehobenen Forumsgenusses,
Hat von euch schon mal jemand eine MySQL Datenbank zum "Platzen" gebracht? Wieviele Datensätze - oder GB - kann die verkraften?
Also ich habe eine Tabelle mit 10M Einträgen auf einem Linux-Rechner mit Athlon@1GHz & 256MB RAM, da ist der Zugriff eigentlich nicht wesentlich langsamer als auf eine vergleichbare Tabelle mit 10k Einträgen (dank Index).
Mein jetziges Datenvolumen (2,7 MB) ist Spielkram:
* 26 Events (Workshops, Vorträge, Talkrunden, Mittagessen),
* 33 Slots, die Zeiteinheiten des Forums,
* 118 Mitarbeiter von Ausstellern,
* 465 Besucher,
* 2.061 Eventwünsche und -buchungen (alle erfüllt),
* 6.700 Gesprächswünsche, davon 2.632 erfüllt,
* 13.452 Anwesenheitseinträge (Slots der Personen),aber wie sieht die 10.000- fache Menge aus?
Bei Verwendung eines Index steigt der Rechenaufwand für die Abfrage logarithmisch mit der Menge der Daten. Mach doch mal einen Benchmark und rechne es aus :-)
Gruß
Alexander Brock
Moin!
Der Besucher bekommt einen "Stundenplan", seine Zeit ist optimal ausgelastet.
OK, ich hätte es genau andersherum gemacht: Der Aussteller bekommt einen Terminkalender, aber weiter im (Kon-)Text …
Nun "spinne" ich mal: Das Konzept könnte doch auch für eine größere Messe, etwa die IAA oder gar die Hannovermesse interessant sein.
Wenn deine Programm-Idee flexibel und performant ist, sollte dem nichts im Weg stehen. Bei größeren Sachen kommen als Schwierigkeiten höchstens die Management- und Marketing-Faktoren dazu ;-)
Hat von euch schon mal jemand eine MySQL Datenbank zum "Platzen" gebracht? Wieviele Datensätze - oder GB - kann die verkraften?
Alle ernsthaften Datenbanksystem verkraften heutzutage mehrere Terabyte Tablespace. Wieviele Datensätze du allerdings beispielsweise in eine Tabelle bekommst, hängt von der Größe deines Primärschlüssels ab: Wenn dieser ein INTEGER ist, bekommst du höchstens [latex]2^31 \approx 2 \cdot 10^9[/latex], also etwas mehr als zwei Milliarden Einträge in die Tabelle. Verwendest hingegen SERIAL bzw. BIGINT, passen in die Tabelle [latex]2^63 \approx 9 \cdot 10^18[/latex] Einträge.
Mit einem kleinen Trick kannst du allerdings die Tabelle bereits mit _einem_ Eintrag „zum Platzen bringen“: Wir nehmen der Einfachheit halber an, unser Primärschlüssel ID sei vom Typ INTEGER und wir führen folgendes INSERT durch:
INSERT INTO bsp_tab (ID, meldung)
VALUES (2147483647, 'kleines Tabellen-DOS (Denial of Service)')
Dank auto_increment wäre die nächste ID 2147483648, aber das ist gerade [latex]2^31[/latex], was nicht mehr in das Feld „hereinpasst“. Diese Möglichkeit des „Datenbank-DOS“ habe ich auf Anregung eines Kollegen für MySQL reproduzieren können.
Mein jetziges Datenvolumen (2,7 MB) ist Spielkram:
* 26 Events (Workshops, Vorträge, Talkrunden, Mittagessen),
* 33 Slots, die Zeiteinheiten des Forums,
* 118 Mitarbeiter von Ausstellern,
* 465 Besucher,
* 2.061 Eventwünsche und -buchungen (alle erfüllt),
* 6.700 Gesprächswünsche, davon 2.632 erfüllt,
* 13.452 Anwesenheitseinträge (Slots der Personen),aber wie sieht die 10.000- fache Menge aus?
Dumme Frage oder dumme Antwort?
Mein jetziges Datenvolumen (27 GB):
* 260000 Events
* 330000 Slots
* 1180000 Mitarbeiter
* 4650000 Besucher
* 20610000 Eventwünsche und -buchungen
* 67000000 Gesprächswünsche, davon 26320000 erfüllt [Anmerkung: niedrige Quote]
* 134520000 Anwesenheitseinträge
Mittlerweile soll selbst MySQL in der Lage sein, mit großen Datenbanken schnell umzugehen, was man früher eher PostgreSQL zuschrieb. Ich kann dir nur empfehlen, deine Anwendung auszuprobieren, du brauchst ja nicht gleich von einer eher kleinere Messe zur IAA oder EXPO zu wechseln. Bei jeder nächstgrößeren Veranstaltung solltest du merken, ob das System noch stabil läuft oder beginnt, langsam instabil zu werden, dann wird es Zeit, die SQL-Abfragen zu optimieren (möglichst viel vom DBMS erledigen lassen, aber dafür weniger Abfragen) oder auf ein „größeres DBMS“ umzusteigen.
Frohe Ostern,
Robert
Moin!
Oh man, hab ich schon lange kein LaTeX mehr getippt (oder ist da ein Bug in Formelanzeige), es sollte natürlich jeweils
[…] Wenn dieser ein INTEGER ist, bekommst du höchstens [latex]2^{31} \approx 2 \cdot 10^9[/latex], also etwas mehr als zwei Milliarden Einträge in die Tabelle. Verwendest hingegen SERIAL bzw. BIGINT, passen in die Tabelle [latex]2^{63} \approx 9 \cdot 10^{18}[/latex] Einträge.
[…]
Dank auto_increment wäre die nächste ID 2147483648, aber das ist gerade [latex]2^{31}[/latex], was nicht mehr in das Feld „hereinpasst“. […]
heißen.
Jetzt aber, viele Grüße,
Robert