Riesige DB Sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Riesige DB Sortieren

    Moin Leute

    ich hab n Problem ^^ (welche in wunder)
    ich habe eine grosse tabelle mit weit über 20mio einträgen.
    Aufbau ist eigentlich ganz simpel. ich hab ne id und dann ein wort welches maximal 8 stellen hat. soweit so gut. Jetzt möchte ich die ganze Tabelle in eine Datei schreiben aber es sollenkein duplikate vorkommen und das ganze soll sortiert sein.
    Habe bisher versucht das ganze mittels distinct und sort und mit einem Limit-befehl laufen zu lassen. aber leider funzt das irgendwie nicht
    Kannmir da jemand ein paar befehle welche hilfreich sein könnten vorwerfen? dann kann ich googlen und gucken ob ich was rausbekomme ^^

    lg aXu

    ps: ist ne mysql-DB und das ganze soll dann mit apache und php angesprochen werden.

  • #2
    Re: Riesige DB Sortieren

    Habe bisher versucht das ganze mittels distinct und sort und mit einem Limit-befehl laufen zu lassen. aber leider funzt das irgendwie nicht
    Ist keine Fehlerbeschreibung, sind aber die richtigen Bordmittel. Kannst ja mal deine Ansätze zeigen!

    Kommentar


    • #3
      naja, das problem ist das es einfach viel zu lange dauert.. hab nach einer H abgebrochen. Im Moment versuche ich Mysql 6 zum laufen zu bringen weil das (wen ich das richtig gelesen habe) auch einen dualcore ausnutzen kann.

      Angaben zum Sys: Nforce4 Board, 2GB Ram, AMD X2 4600+ dualcore, php 5.2.x

      Kommentar


      • #4
        20 Millionen Einträge sind vollkommener Wahnwitz x_X

        Clustering lautet die Devise - irgendein Muster finden, nach dem man die Datensätze auf verschiedene Tabellen aufteilen kann (z.B. dem ersten Buchstaben), dann hat man deutlich kleinere Tabelle die man sortieren muss


        btw. Mysql6 ist Beta - willst du ernsthaft eine riesige Tabelle in die Hände von unvollkommener Software legen?!...

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          20 Millionen Einträge sind vollkommener Wahnwitz x_X
          Das hatte ich auch so gedacht, wollte aber erstmal seine Probleme mit seinem Query erfahren!

          Kommentar


          • #6
            sind keine produktive Daten ^^
            Okay, das würde dann heissen, das ich die anzahl der Tabellen erhöhen und dabei die Anzahl der Datensätze verringern soll. wäre ne idee. Würde mehr Aufwand beim eintragen ergeben, dafür wäre die Abfrage schneller. muss ich gucken ob ich das realisieren kann. Hab da offenbar dem ganzen etwas zu viel zugemutet ^^
            Anfänger halt

            Kommentar


            • #7
              Okey, mal den query den ich probeweiser verwendet habe

              SELECT DISTINCT liste FROM testdb ORDER BY liste ASC LIMIT 1024

              Kommentar


              • #8
                Kannst versuchen einen Index auf liste zu setzen - mMn ist die Tabelle aber trotzdem zu groß, das ist einfach unpraktikabel.
                Die Hardware im Hintergrund skaliert nicht genug, damit man mit so großen Tabellen noch artgerecht hantieren könnte...

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  schade... was wäre dann ein system welches für solch grosse tabellen geeignet ist?

                  Kommentar


                  • #10
                    Original geschrieben von aXu
                    schade... was wäre dann ein system welches für solch grosse tabellen geeignet ist?
                    Gar keines.
                    (Super-Computer[/ironie])

                    Operationen auf solch große Tabellen dauern einfach und in den meisten/allen Fällen hat man schlichtweg nicht die Zeit um die komplette Applikation für ein paar Tage still zu legen, weil ein ALTER läuft.
                    Wenn man allerdings 10, oder 20, oder 100, oder 200 kleine Tabellen hat, lassen sich diese deutlich schneller manipulieren.


                    Die Festplatten skalieren in der Größe schneller nach oben als z.B. der RAM, will heißen während z.B. eine Gigabyte große Tabelle, bei den meisten Datenbank-Servern locker noch in den RAM passt, tut es eine 500 Gigabyte große Tabelle schon nicht mehr.

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      hm.. komisch.. dem ganzen liegt ein textfile zu grunde.
                      Wenn ich das mit einem C-Programm sortiere geht das ruckzuck... wenns hoch kommt etwa 15 min...

                      Also konkret: will man das ganze mit SQl und PHP lösen, muss das System über eine ganze Menge RAM und sehr schneller Festplatten verfügen, dazu müssen möglichst viele Tabellen mit möglichst wenigen Einträgen bestehen. Es scheint mir also, dass das System Mysql nicht besonders Leistungsfähig ist... Schade eigentlich.

                      Aber ich liege korrekt, das das Mysql 5 keine multiprozessorunterstützung hat?

                      Kommentar


                      • #12
                        Original geschrieben von aXu
                        hm.. komisch.. dem ganzen liegt ein textfile zu grunde.
                        Wenn ich das mit einem C-Programm sortiere geht das ruckzuck... wenns hoch kommt etwa 15 min...
                        Kann ich nichts zu sagen, ohne mir C-Programm, Textfile, Datenbank und Query genauer anzusehen und dafür habe ich keine unbezahlte Zeit~
                        Mal abgesehen davon, dass MySQL z.B. auch noch so tolle Variablen wie sort_buffer bereit stellt, die man für den eigenen Zweck und für den einen Query mal erhöhen könnte.

                        Aber ich liege korrekt, das das Mysql 5 keine multiprozessorunterstützung hat?
                        Nein, nicht wirklich. Multiprozessorunterstützung bietet MySQL auf jeden Fall seit 5.0, die allerdings teilweise nicht einwandfrei skaliert, vor allem in Bezug auf InnoDB und deren Mutex-Spielereien gibt es häufiger mal komische Messergebnisse bei bestimmten Queries.

                        Du kannst es natürlich trotzdem einfach mal mit innodb probieren (wenn du bisher myisam verwendet hast - oder auch umgekehrt), vielleicht skaliert die jeweils andere Engine besser für deinen Zweck~
                        Oder auch einfach mal mit einer HEAP/MEMORY-Tabelle den kompletten Inhalt in den RAM zwingen, sofern der ausreicht.

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          http://www.mysqlperformanceblog.com/...-large-tables/

                          Kannst du bitte noch ein paar weitere Infos posten?
                          - Schema inkl. Spaltenformate, Schlüssel und Constraints
                          - Verteilung der Daten über den möglichen Wertebereich (grob)
                          - sonstige Anfrage auf diese Tabelle (nur den Zweck nennen, die Queries selbst sind unwichtig)

                          Kommentar

                          Lädt...
                          X