ist X zwischen Y und Z

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

  • ist X zwischen Y und Z

    hi

    ich habe ein kleines problem, rsp. eine bisher unschöne lösung.

    also das ganze ist so.

    ich habe etwas mehr als 300'000 dateien.

    nun, die dateien heissen etwa so:

    23398-17.txt
    15677-15.txt
    00243-03.txt

    damit die nicht alle in einm verzeichnis liegen, habe ich die verzeichnise durchnummeriert.

    00001-00500
    00501-01000
    01001-01500
    01501-02000

    .....

    23501-24000
    24001-24500
    24501-25000
    25001-25500




    also, so liegen alle dateien mit dem präfix 18946-xx.txt im ordner 18501-19000



    also, bis jetzt habe ich einfach eine funktion gemacht, welche alle vorhandenen ordnernamen (mitlerweilen über 50) in einem array speichert, und dann mit is_file() abfragt, ob die datei, welche ihr gegeben wird, in diesem verzeichnis existiert, sobald sie existiert, wird ein true, und den namen des verzeichnis, rsp. der pfad zu der datei gegeben.

    da das script, welches diese funktion braucht, selbige etwa 60 bis 80 mal aufruft, und so also etwa gut 300mal eine is_file abfrage losschickt, angenommen, die funktion findet nach jedem 5. array eintrag (von 50!) das file.

    nun, wie ihr denken könnt, braucht dieses script recht lange, bis es fertig ist.


    geschrieben habe ich es, als es etwa noch 10ordner waren, und da ging es noch recht flott.


    also, ich wollte nun fragen, ob irgendjemand ne idee hat, wie ich anhand des präfixes (von 18946-xx.txt wäre der präfix "18946") den ordnername herausfinden könnte, ohne eine is_file abfrage.
    die ordnernamen sind immer gleich aufgebaut. (siehe oben)

  • #2
    einfach ne vergleich

    if(x < soundso && x > soundso)

    Kommentar


    • #3
      ja, das ist schon klar, wenn ich die beiden "soundso" habe.

      aber ich frage ja, wie ich die am besten beiden "soundso" bilden kann, so, das es möglichst schnell ist.

      Kommentar


      • #4
        aber ich frage ja, wie ich die am besten beiden "soundso" bilden kann, so, das es möglichst schnell ist.
        indem du für soundso die jeweils nebeneinanderliegenden ordnernamen
        nimmst
        [font=dauphin]Die Seite für Spychos[/font]

        Kommentar


        • #5
          den ordnernamen kannst du so direkt nicht rausbekommen, aber was spricht dagegen 50 ordner in einem array zu speichern?

          kannst dir auch ne funktion machen, die immer auf den nächsten 500er schritt erhöht oder so.

          frag mich sowieso, wieso a) ordner und wieso b) nicht in ner db

          Kommentar


          • #6
            [/QUOTE]

            den ordnernamen kannst du so direkt nicht rausbekommen, aber was spricht dagegen 50 ordner in einem array zu speichern?
            eben, die zeit, welche das script benötigt.


            kannst dir auch ne funktion machen, die immer auf den nächsten 500er schritt erhöht oder so.
            daran denke ich eben, aber ich weiss noch nicht ob es dann schneller ist.
            muss es wohl mal ausprobieren.



            frag mich sowieso, wieso a) ordner
            naja, wieso nicht, es sind eben nicht "nur" text dateien, sondern auch bilder, videos, musik, word files, excel, html, usw. also einfach sehr viele verschiedene dateien, welche das volumen einer datenbank schnell sprengen würden.
            (die dateien insg. sind über 50gigs)



            und wieso b) nicht in ner db
            eben, ne DB mit 50"gigabyte?? ne, eher nicht.

            [QUOTE]

            Kommentar


            • #7
              naja, ordner brächtest du aber nicht, da du doch ohnehin die zahlen hast. die machen das ganze eher kaput. um es vernünftig zu archivieren.

              hast du etwa in dem verzeichnis noch andere dateien als ordner?

              Kommentar


              • #8
                also das ist so.

                ich habe extra eine S-ATA (160gigs nominell) gekauft, auf welcher ich nur die archiv daten speichere.

                00001-00500/00246-06.jpg

                und ausser den verzeichnissen mit den nummerischen einteilung hat es keine verzeichnisse auf dem laufwerk.

                nun, ich weiss es wäre besser, wenn ich alle dateien in einem verzeichniss hätte, aber dann würd es einfach irgendwann zu viel werden für das script.

                ich hatte schon mal vor ein paar monaten ein thread hier erstellt.

                da hatte sich PHP geweigert, in ein verzeichnis zu schreiben, welches grösser als 3.25Gb war, seit da habe ich die verzeichnisse nummerisch unterteilt, so dass jedes verzeichnis etwa 1gigabyte hat.

                ausserdem würde die WS (linux suse 8) viel zu lange haben, um die dateien anzuzeigen.

                ich habe schon so mit 1gig verzeichnissen à je etwa 6000dateien genug lang, bis der verzeichnis browser (nicht webbrowser) alle dateien anzeigt.
                es sind gut 2sekunden verzögerung, bis der inhalt angezeigt wird.

                also will ich gar nicht über die verzögerung nachdenken, wenn er alle 300'000 dateien in EINEM EINZIGEN VERZEICHNISS hätte

                Kommentar


                • #9
                  nachvollziehbar

                  hast du etwa in dem verzeichnis noch andere [B]dateien[B] als [die] ordner?

                  Kommentar


                  • #10
                    hi

                    also das ganze ist so.
                    ich habe das laufwerk.

                    auf dem laufwerk hat es einen ordner "programm", welcher der htdocs vom apache ist. es ist nur ein virtuelles zweiglein, welches nur diesen code ausführen kann, also der ganze programmcode (php, und mysql, htmls, usw) ist in diesem verzeichnis.
                    auf der gleichen stufe, also im root des verzeichnisses sind die ordner 00001-00500, usw.
                    anosonsten hat es keine ordner.
                    im ordner "programm" hat es noch einige unterordner.
                    in den nummerischen ordner hat es aber keine unterordner, und auch keine andere dateien, ausser die 15648-01.jpg (usw.).


                    wieso??

                    Kommentar


                    • #11
                      dann kannst du doch alle ordner, die im root sind (programm ausgenommen) in ein array packen?

                      *verschieb* mal nach BS

                      Kommentar


                      • #12
                        hi

                        bis jetzt habe ich ja alle in ein array pfade in ein array geschrieben, und dann mit einer while() schleife alle elemente durchlaufen, jedes mal ein is_file($val.$filename) gemacht, bis er die datei gefunden hat.

                        aber eben durch diese variante muss er pro aufruf des scriptes eben, wenn es gut läuft, ohne problem 600 is:file() durchlaufen.


                        ich habe gedacht, es könnte evt. schneller sein, wenn ich eine tabelle mache (mysql), die so aussieht:
                        Code:
                        | start | ende | pfad |
                        ---------------------------
                        |00001|00500|der pfad|
                        ist das wohl schneller??


                        also, was könnte man sagen, ist schneller eine mysql abfrage (DB wird einmal am anfang des scriptes geöffnet, und am schluss beendet) zu machen, oder etwa 10is_file() zu machen??

                        Kommentar


                        • #13
                          also ich rall gar nicht mehr, worauf du eigentlich hinaus willst...

                          vielleicht steckst du dein Ziel nochmal ab.

                          Kommentar


                          • #14
                            Also du hast irgendeinen Dateinamen und willst rausfinden, in welchem Ordner die liegt.
                            Dazu hast du eine Zahl, und du brauchst die nächstkleinere Zahl, die ohne Rest durch 500 teilbar ist.
                            Soweit richtig?

                            Dazu musst du die Zahl duch 500 teilen und den Rest abschneiden. Den Wert multiplizierst du dann wieder mit 500 und schon hast du die nächstkleinere, durch 500 teilbare Zahl.
                            hopka.net!

                            Kommentar


                            • #15
                              ist natürlich das einfachste

                              Kommentar

                              Lädt...
                              X