[Funktion] Efiziente Suche in Arrays

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

  • [Funktion] Efiziente Suche in Arrays

    Hi @ll,

    ich habe ein Problem:

    wie kann ich ein Array1 nach Werten (kleine Strings) durchsuchen die in Array2 vorkommen, so, das die Werte in Array3 zuruckgeschrieben werden können (oder gleich .txt), jeder Wert nur ein mal? Der Hacken ist, das die Arrays riesige Datenmengen enthalten (ca. 30 MB), und "normaler" Vergleich liegt dem Server schon fast lahm! Die Funktion array_diff bringt es auch nicht!

    Bin seeeehr dankbar für Hilfe!
    Zuletzt geändert von Alexis_; 24.02.2004, 01:26.

  • #2
    brauchst du nur array3 oder auch array1 und array2?

    wenn du die daten aus ner datenbank bekommst, kann man eventuell da schon ansetzen (SELECT posten)
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Hi mrhappiness ,

      brauchst du nur array3 oder auch array1 und array2?
      wenn du die daten aus ner datenbank bekommst, kann man eventuell da schon ansetzen (SELECT posten)
      Ich glaube doch rolleyes:
      Daten kommen aus ASCI-Dateien.

      Array1 ist das Ergebnis von Suche mit Regulären Ausdrucken.
      Array2 ist enthält Werte (gleiche wie Array1) aus anderen .txt-Datei.
      Array3 soll das Ergebnis von einem Vergleich (Kombination) von Array1 und Array2 werden und Werte von beiden enthalten, vorbei kein Wert (String) darf 2 mal (oder öfter) vorkommen. Das Ziel ist Erstellung von eine Liste in .txt mit gefilterten Werten - Email-Adressen, Namen etc.

      Kommentar


      • #4
        mach das mit ner datnbank *g*

        wenn nicht, könntest du um einen timeout zu vermeiden, immer nur 1000 einträge (beispielwert) bearbeiten, aus demarray löschenund das neue array in einer datei speichern

        dann rufst du mit header() die seite erneut auf und machst die nächsten 1000
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          mach das mit ner datnbank *g*
          Gehet nicht, ich kriege dem Müll auf dem Tisch und muss mit leben
          An so etwas hebe ich nicht gedacht, ich habe ganze Zeit mich mit dem sortieren beschäftigt Aber so gehet es sicher auch

          Deine Idee ist prima! Wird mir sicher weiter helfen

          Kommentar


          • #6
            <blöd daher red>
            nix mit header neu aufrufen! das macht man schön brav mit einer for schleife, die eine funktion aufruft und das neue ergebnis an das alte mit dran hängt. am ende wäre es vielleicht noch clever array3 nochmal zu durchforsten, ob da doppelte einträge sind, denn lass eintrag 352 und 1355 identisch sein...
            </blöd daher red>

            aber ich versteh noch nicht so ganz, warum du so riesen datenmengen hast! die einzelnen einträge in der db müssen sich doch in irgendeinem punkt eindeutig voneinander unterscheiden und nach dem feld suchst du. du kannst dir ja die infos häppchenweise aus der db holen, immer unter berücksichtigung des bisher erarbeiteten. oder hab ich da irgendwas nicht verstanden...

            Kommentar


            • #7
              nix mit header neu aufrufen! das macht man schön brav mit einer for schleife,
              und "normaler" Vergleich liegt dem Server schon fast lahm!
              könntest du um einen timeout zu vermeiden
              du kannst dir ja die infos häppchenweise aus der db holen,
              Gehet nicht, ich kriege dem Müll auf dem Tisch und muss mit leben
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                quinn,
                die Daten (Strings) kommen nicht aus db sondern aus *.txt / ASCII-Datei (jede zwischen 20 und 35 MB), werden mittels reguläre Ausdrücke rausgefiltert und in Array (Array1) geladen. Daraus soll eine Liste (ebenfalls *.txt) entstehen. Die wächst auch mit jeden Durchlauf (Array2), jetzt schon 30MB. Die Einträge dürfen sich aber in der Liste nicht wiederholen. Ich muss die Liste mit neuen Einträgen vergleichen und nur wirklich neue Daten (Array3) an die Liste anhängen.

                Ein Durchlauf dauert jetzt schon mit CPU 600MHz 20min, der Speicher ist auch ziemlich ausgelastet. Meine Frage war wie kann ich das ganze effizienter und sicherer machen, die Datenquelle kann ich aber nicht ändern. Die sind wie sie sind und ich muss mit leben.

                Kommentar


                • #9
                  hmm,

                  array2 und array3 kannst du zumindest nachträglich in eine db packen, array2 soll ja wohl erhalten bleiben? und array1 ist immer neu?

                  ne txt-liste kannste dann nebenbei erstellen ...
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    hast du denn ne datenbank?

                    wenn ja, lade das array doch da rein
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      dann hast du nicht viele möglichkeiten. weli die datenmenden sind immer riesig. du brauchst eine datenbank, oder zumindest eine struktur. wenn du die daten als viele kleine txt files speicherst, die nach dem Anfangsbuchstaben der Email adressen sortiert sind, dann kannst du die datenmengen minimieren.

                      daten einlesen, in ne datenbank packen und nach dem verarbeiten aus der datenbank eine txt machen geht nicht, wei du keine db hast, oder?

                      Kommentar

                      Lädt...
                      X