Thema: Datenbank viel zu groß?
-
21.11.2012, 20:45 #1
- Registriert seit
- 16.11.2012
- Beiträge
- 8
Thanked 3 Times in 2 PostsDatenbank viel zu groß?
Guten Abend,
ich habe in den letzten Tage aus Spaß mal einen Cronjob angelegt, der mir jede Menge MD5-Hashs aus zufällig erzeugten Strings erzeugt. Jeder Eintrag kommt in der Datenbank nur einmal vor.
Das Problem ist aber, dass jetzt schon 34.761.721 Einträge in der Datenbank vorhanden sind (3,2 GB).
Mit einer einfachen Abfrage kann ich nicht nach einem bestimmten String in der Datenbank suchen, das dauert einfach zu lange, jetzt habe ich es mit einer for-Schleife versucht, das funktioniert aber leider auch nicht so, wie ich es mir vorgestellt habe. Es dauert auch viel zu lange, bis das Skript zu einem Ergebnis kommt.
Jetzt ist meine Frage: Gibt es noch weitere Möglichkeiten?
-
21.11.2012, 20:55 #2
AW: Datenbank viel zu groß?
Wie ist denn dein jetziger Query zum abfragen?
Allgemein ist zu sagen das MySQL für so eine Größe noch perfekt zu benutzen ist. 3,2 GB sind noch nichts. Vielleicht musst du deine Abfragen etwas aufteilen, bzw. die Datenbank aufteilen und kein * from string reinhauen.Geändert von Ta1lor (21.11.2012 um 20:59 Uhr)
-
21.11.2012, 21:14 #3
- Registriert seit
- 16.11.2012
- Beiträge
- 8
Thanked 3 Times in 2 PostsAW: Datenbank viel zu groß?
PHP-Code:for($i=0;$i<34756075;$i+1000){
$eins = $i;
$zwei = $i+1000;
$anz = mysql_num_rows(mysql_query("SELECT word FROM `md5_tab` WHERE md5 = '$md5' LIMIT $eins , $zwei"));
if($anz!=0){
$q = mysql_query("SELECT word FROM `md5_tab` LIMIT $eins , $zwei");
while($res = mysql_fetch_array($q)){
echo $res[0];
}
$i = 35000000;
}
}
-
21.11.2012, 21:39 #4
AW: Datenbank viel zu groß?
Hast du die Tabelle indiziert? Und bei deinem Code da machst du ja zwei Anfragen über die ganze Tabelle? Reicht da nicht einer?
Geändert von Ta1lor (21.11.2012 um 21:43 Uhr)
-
21.11.2012, 22:31 #5
- Registriert seit
- 16.11.2012
- Beiträge
- 8
Thanked 3 Times in 2 PostsAW: Datenbank viel zu groß?
Ja, die Tabelle ist indiziert. Du hast Recht, eine Abfrage sollte reichen, ich weiß jetzt im Moment auch nicht, wieso ich noch mysql_num_rows ausführe.
Werde es mal mit nur einer Abfrage versuchen.
-
21.11.2012, 23:58 #6
AW: Datenbank viel zu groß?
PHP-Code:SELECT word FROM `md5_tab` WHERE md5 = '$md5' LIMIT $eins , $zwei"
Dementsprechend müsste ein LIMIT 1 reichen. Dann wird deine DB Abfrage auch schneller durchgeführt.
Sorry, wenn ich es falsch verstanden habe„Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
- Albus Dumbledore, Harry Potter 2
/guestchat registerGuest
-
22.11.2012, 16:20 #7
- Registriert seit
- 25.11.2011
- Beiträge
- 280
- Blog Entries
- 13
Thanked 56 Times in 39 PostsAW: Datenbank viel zu groß?
LIMIT ist dazu da um nur die ersten X Werte ausgeben zu lassen wenn es möglich ist dass es weit mehr gibt.
Wenn jeder Hash einzigartig ist kann es niemals sein dass es mehr wie einen Datenbankeintrag dazu gibt, also kann man es ganz weglassen.
Schneller wird die Abfrage dadurch logischerweise aber nicht.
Da es nur 1 Ergebnis gibt wird durch Limit ja nix rausgefiltert, also gleich schnell wie ohne.
-
23.11.2012, 13:52 #8
- Registriert seit
- 19.11.2011
- Beiträge
- 496
Thanked 412 Times in 268 PostsAW: Datenbank viel zu groß?
Um sehr schnell zu überprüfen, ob ein Element in einem Vokabular enthalten ist, bietet sich der Bloomfilter an.
Steht die For-Schleife 1:1 in deinem Skript? Dann wird sie ja nur einmal ausgeführt. $i+1000 verändert $i nicht. Und am Ende setzt du $i auf 35.000.000, damit ist die Abbruchbedingung erfüllt.
Ähnliche Themen
-
Wie viel mAh sind viel für ein Handy?
Von Electro im Forum MobilgeräteAntworten: 6Letzter Beitrag: 12.04.2014, 00:20 -
Wird Hausdurchsuchung groß geschrieben?
Von Max899 im Forum BildungAntworten: 1Letzter Beitrag: 03.09.2013, 19:11 -
Wie groß darf die Signatur sein?
Von NokyRed91 im Forum SupportAntworten: 1Letzter Beitrag: 05.06.2012, 21:48 -
Omed - Groß Raus aus diesem Hochhaus
Von OneWorld im Forum Musik ♫Antworten: 0Letzter Beitrag: 21.03.2012, 17:39
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.