1. #1

    Registriert seit
    16.11.2012
    Beiträge
    8
    Thanked 3 Times in 2 Posts

    Standard Datenbank 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?

  2. #2
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 833 Times in 435 Posts

    Standard 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)

  3. #3

    Registriert seit
    16.11.2012
    Beiträge
    8
    Thanked 3 Times in 2 Posts

    Standard AW: 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;
            }
        } 

  4. #4
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 833 Times in 435 Posts

    Standard 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)

  5. #5

    Registriert seit
    16.11.2012
    Beiträge
    8
    Thanked 3 Times in 2 Posts

    Standard AW: 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.

  6. #6
    Avatar von Mentos
    Registriert seit
    18.11.2011
    Beiträge
    451
    Thanked 498 Times in 240 Posts

    Standard AW: Datenbank viel zu groß?

    PHP-Code:
    SELECT word FROM `md5_tabWHERE md5 '$md5' LIMIT $eins $zwei
    Verstehe ich ehrlich gesagt nicht. Wenn wir deiner Datenbank mal unterstellen, dass sie keine Kollisionen hat, ist jedem MD5 Wert exakt einem Wort zugeordnet.
    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

  7. #7
    Avatar von Minecraft
    Registriert seit
    25.11.2011
    Beiträge
    280
    Thanked 56 Times in 39 Posts
    Blog Entries
    13

    Standard AW: 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.

  8. #8

    Registriert seit
    19.11.2011
    Beiträge
    496
    Thanked 412 Times in 268 Posts

    Standard AW: 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

  1. Wie viel mAh sind viel für ein Handy?
    Von Electro im Forum Mobilgeräte
    Antworten: 6
    Letzter Beitrag: 12.04.2014, 00:20
  2. Wird Hausdurchsuchung groß geschrieben?
    Von Max899 im Forum Bildung
    Antworten: 1
    Letzter Beitrag: 03.09.2013, 19:11
  3. Wie groß darf die Signatur sein?
    Von NokyRed91 im Forum Support
    Antworten: 1
    Letzter Beitrag: 05.06.2012, 21:48
  4. Omed - Groß Raus aus diesem Hochhaus
    Von OneWorld im Forum Musik ♫
    Antworten: 0
    Letzter Beitrag: 21.03.2012, 17:39
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.