phpbar.de logo

Mailinglisten-Archive

[php] =?ISO-8859-1?Q?Grosse_Menge_Datens=E4tze_m=F6glichst_performant _verteil?= =?ISO-8859-1?Q?en?=

[php] Grosse Menge Datensätze möglichst performant verteil en

Andreas Ahlenstorf php_(at)_phpcenter.de
Thu, 8 Aug 2002 12:44:06 +0200


Hallo zusammen!

Ich habe die Aufgabe, 15 Mio. Datensätze, bestehend
aus einer ID und zwei md5-Strings, in MySQL zu speichern. Nachher
soll ein kleines PHP-Script einen md5-String vorgelegt bekommen
und danach in md5_1 suchen. Wenn gefunden, den kompletten
Datensatz ausgeben.

Ausgedacht habe ich mir folgende DB-Struktur:

id, int, auto_increment, index
md5_1, char(32), index
md5_2, char(32)

Frage: Gibt es eine noch schnellere Möglichkeit?

Nun habe ich mal 5 Mio. Datensätze generiert, ein Optimize Table
drüberlaufen lassen und einen Testselect durchgeführt. Gedauert
hat das ganze ca. 5 Sekunden. Für einen Webservice eigentlich
viel zu langsam, der möglichst viele Requests bewältigen soll.

Nun habe ich mir überlegt, die Tabellen so aufzusplitten, dass
die Datensätze nach ihrem ersten Zeichen in verschiedene Tabellen
abgelegt werden: Alle md5-Strings, die mit a beginnen, in tb_a,
alle, die mit b beginnen, in tb_b usw. Das würde 36 Tabellen
herausbringen (26 Zeichen des Alphabets plus die Ziffern 0-9).

Frage: Wieviele Datensätze soll ich maximal pro Tabelle erlauben,
damit die Performance nicht einbricht?

Ware nett, wenn mir jemand ein bisschen helfen könnte, solche
Datenmengen musste ich noch nie bewältigen...

Und noch eine Frage: Welche Rolle spielt die Hardware? Um SCSI
würde man wohl kaum herumkommen, was bringt in dieser
Beziehung ein Dualprozessor-System, was bringt ein PIV
Xeon-Prozessor? Respektive: Was bringt MySQL richtig auf trab und
was würde sich lohnen?

Das einzige, was ich bisher dazu weiss, ist, dass MySQL besser
mit DDR-RAM als mit RAMBUS arbeitet.

Gruss,
Andreas


php::bar PHP Wiki   -   Listenarchive