Ankündigung

Einklappen
Keine Ankündigung bisher.

Lösung für performanten Umgang mit großen XML-Files gesucht

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von jack88 Beitrag anzeigen
    Die Beschreibung des Problems ist leider zu allgemein für einen konkreten Lösungsvorschlag. Was wollt Ihr denn eigentlich konkret vergleichen:

    - Dateien gleich/unterschiedlich
    - Anzahl der Elemente
    - alle Elemente/bestimmte Elemente
    - vielleicht nur bestimmte Keys oder Values
    etc…

    Wie soll ein Vergleich also konkret ablaufen - man könnte ja erst mal z.B. mit zwei Files anfangen
    Oh, das habe ich wohl vergessen zu erwähnen. Mein Fehler. Vergleichen wollen wir nur die Elemente (auch mehrerer Dateien). Können sowohl nur eins als auch viele sein.

    Beispiel: Studentenanzahl von mehr als 20 Universitäten und die jeweils miteinander vergleichen. Bei uns kann es eben vorkommen, dass es bis zu 100 verschiedene Files sind und dort auch jeweils mehr als 100 Felder.



    Zitat von rudygotya Beitrag anzeigen
    Hier könnte man eventuell mit MySQLs ExtractValue spielen - wie das vom Speed her mithalten kann, müsste man testen. Zumindest könntest du möglichst viele zu vergleichende Daten im RAM cachen, dann per stored procedure durchiterieren. Wobei ich nicht einschätzen kann, ob dir der mysql-Funktionsumfang dafür reicht.

    Falls auch andere DBs in Frage kommen, schau dir mal Postgre an, per xml-exists und co. könntest du relativ bequem vergleichen.

    Alternativ aus dem XML ein binary tree basteln und damit arbeiten. Würde auch super in eine schemalose DB passen. Für den Ansatz: http://ejohn.org/blog/javascript-tri...ance-analysis/
    Hast du einen Ansatz, wie man mit der Kombination PHP/MySQL mit dem RAM spielen kann? Postgre werde ich mir mal anschauen. Danke dafür!



    Zitat von Kopakrraf Beitrag anzeigen
    Das ist natürlich wie vorher schon angemerkt quatsch. Datenbanken sind genau dazu da sich Unmengen von Daten zu merken, und diese mit hinnehmbarer Performance zu verarbeiten.


    Ihr möchtet womöglich ein Data-Warehouse!
    Im Prizip ist das eine Kombination aus einer Datenspeicherungschicht(Datenbank,xml-files...) und einer Intelligenten Komponente(OLAP,ROLAP...) die Aggregationen vornimmt.

    Wir arbeiten z.B. mit Mondrian
    Inwiefern unterscheidet sich deine Lösung zu einer gewöhnlichen Lösung mit einer normalen MySQL-Datenbank? Wie ich herauslese, nutzt du das für mehrere Dateiformate bzw. verschiedene Typen. Wir brauchen allerdings nur eine Lösung für XML only. Ist das da auch sinnvoll?

    Kommentar


    • #17
      Datentypen haben nicht mit Dateiformaten zu tun. Euer XML-File würde ja auch nicht als XML in die DB gelegt, sondern atomar gespeichert.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #18
        Zitat von RedFin Beitrag anzeigen
        Inwiefern unterscheidet sich deine Lösung zu einer gewöhnlichen Lösung mit einer normalen MySQL-Datenbank?
        Salopp gesagt:
        Es ist sehr viel schneller! Weil dein OLAP-Tool Zwischenergebnisse speichert und verwaltet.

        Zitat von RedFin Beitrag anzeigen
        Wie ich herauslese, nutzt du das für mehrere Dateiformate bzw. verschiedene Typen. Wir brauchen allerdings nur eine Lösung für XML only. Ist das da auch sinnvoll?
        Klar. Zum Data-Warehousing gehöhrt auch der Bereich des ETL (Extract,Transform,Load). Das Daten ungeachtet seiner Herkunft Betrachten kann.

        Ob du die XML-Daten in eine Datenbank normalisierst oder direkt aus den XML-Files liest, sollte dann egal sein. Ich persönlich würde jedoch für den Fall das Ihr nur die eine XML-Quelle habt, kein ETL machen sondern einfach in die Datenbank Normalisieren.
        BTW, da Ihr auch keine Ahnung habt wie, empfehele ich einfach mal den Kelz zu lesen!

        Diese Datenbank solltest du am besten gleich unter den Gesichtspunkten von OLAP anlegen (Stichwort Snowflake-Schema )

        Kommentar


        • #19
          Zitat von RedFin Beitrag anzeigen
          Inwiefern unterscheidet sich deine Lösung zu einer gewöhnlichen Lösung mit einer normalen MySQL-Datenbank? Wie ich herauslese, nutzt du das für mehrere Dateiformate bzw. verschiedene Typen. Wir brauchen allerdings nur eine Lösung für XML only. Ist das da auch sinnvoll?
          Ob das Sinnvoll ist kann dir anhand diese Threads keiner beantworten. Dein Problem sind 1000te XML Files aus den du Daten vergleiche willst. Für die Problemstellung gibts natürlich auch 1000te mögliche Lösungen, aber ob die für dein konkretes Problem sinnvoll sind kann dir hier so keiner Beantworten, weils nimmand kennt.

          Kommentar


          • #20
            Das fängt schon damit an, dass „Vergleichen“ letztlich eine NULL-Aussage ist. Wie vergleicht man mehr als 2 Datensätze? Eigentlich kann man die nur sortieren.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #21
              Zitat von Kopakrraf Beitrag anzeigen
              Salopp gesagt:
              Es ist sehr viel schneller! Weil dein OLAP-Tool Zwischenergebnisse speichert und verwaltet.



              Klar. Zum Data-Warehousing gehöhrt auch der Bereich des ETL (Extract,Transform,Load). Das Daten ungeachtet seiner Herkunft Betrachten kann.

              Ob du die XML-Daten in eine Datenbank normalisierst oder direkt aus den XML-Files liest, sollte dann egal sein. Ich persönlich würde jedoch für den Fall das Ihr nur die eine XML-Quelle habt, kein ETL machen sondern einfach in die Datenbank Normalisieren.
              BTW, da Ihr auch keine Ahnung habt wie, empfehele ich einfach mal den Kelz zu lesen!

              Diese Datenbank solltest du am besten gleich unter den Gesichtspunkten von OLAP anlegen (Stichwort Snowflake-Schema )

              Das ganze werde ich mir erstmal durchlesen und mich dann wieder melden. Klingt sehr interessant. Ich danke dir vielmals.


              Zitat von erc Beitrag anzeigen
              Ob das Sinnvoll ist kann dir anhand diese Threads keiner beantworten. Dein Problem sind 1000te XML Files aus den du Daten vergleiche willst. Für die Problemstellung gibts natürlich auch 1000te mögliche Lösungen, aber ob die für dein konkretes Problem sinnvoll sind kann dir hier so keiner Beantworten, weils nimmand kennt.
              Das hier viele Wege nach Rom führen ist mir natürlich klar. Allerdings ist das ja auch ein Konzeptforum, was bedeutet, dass ich das momentan nur konzeptioneller Ebene diskutieren will, bevor ich irgendeinen Mist programmiere und am Schluss dann merke, dass es der falsche Ansatz war. Das Problem habe ich grundsätzlich gut genug beschrieben. Allgemein: Viele XML-Files müssen gespeichert werden und danach müssen die Elemente ausgewählter XML-Files miteinander verglichen werden, wobei dazu dann eine Ausgabe in irgendeiner Form erfolgt. Kleines Beispiel: Ich hab XML-Files von Unis mit vielen Elementen, die Informationen über die jeweilige Universität beinhaltet. Jetzt möchte ich Uni A, C, D, F, J, K, O, P, Z... vergleichen und dabei insbesondere die Studentenanzahl. Der Vergleich erfolgt natürlich numerisch und es werden immer nur dieselben Elemente verglichen. Wenn ich Studentenanzahl wissen möchte, dann wird das in allen ausgewählten XML-Files analysiert und verglichen.

              Die Universitäten hier sind nur ein Beispiel. In der Realität haben wir mehrere XML-Files mit sehr vielen Elementen (siehe Ausgangsbeschreibung).

              Wenn etwas unklar ist können gerne detaillierte Fragen gestellt werden.

              Zitat von nikosch Beitrag anzeigen
              Das fängt schon damit an, dass „Vergleichen“ letztlich eine NULL-Aussage ist. Wie vergleicht man mehr als 2 Datensätze? Eigentlich kann man die nur sortieren.
              Ja, darum gehts ja im Grunde. Wenn wir beim Beispiel Universitäten bleiben, will ich ja nur wissen, wieviel Studenten Uni A und wieviel Uni B haben. Dann wird eben beispielsweise 400 mit 850 verglichen.

              Kommentar


              • #22
                Als Anforderungsdefinition ist eben „ich will 1000 Datensätze miteiander vergleichen“ nicht geeignet. Wenn Euer Auftraggeber das so sagt, ist das in Ordnung, Ihr als Progranmmierer müsst daraus aber Anwendungsfälle spezifizieren, die den Kern der Aufgabe treffen.

                Vgl. Der pragmatische Programmierer, 36 - Die Anforderungsgrube.

                Nicht nur in Hinsicht auf Eure Arbeit, sondern auch auf konkrete Antworten hier, ist das unerlässlich.

                Dann wird eben beispielsweise 400 mit 850 verglichen.
                Um was abzuleiten?
                Jetzt möchte ich Uni A, C, D, F, J, K, O, P, Z... vergleichen und dabei insbesondere die Studentenanzahl.
                Vergleiche die Studentenanzahl aller gegebenen Uiversitäten und liefere die Uni mit den meisten Studenten.
                oder
                Vergleiche die Studentenanzahl aller gegebenen Uiversitäten und ordne die Datensätze nach der Anzahl der Studenten, absteigend.

                DAS wäre eine verständliche Anforderung.

                Erstelle ein Hochschulranking über alle gegebenen Datensätze. Ziehe dabei heran: Die Anzahl der Studenten, den Durchschnitt der Abschlussnoten, die Anzahl der Studienabbrecher…
                Positiv in das Ranking ein gehen
                - Die Anzahl der Studenten, eine höhere Anzahl ist besser zu bewerten. Die Anzahl geht mit dem Faktor … in die Gesamtnote des Rankings ein.
                - Die durchschnittliche Abschlussnote


                Nicht vorhandene Daten müssen über folgenden Alogrithmus aus dem Ranking herausgerechnet werden: ....


                DAS vielleicht auch.


                Ganz ehrlich - ich finde Du doktorst gerade am falschen herum, so lange nicht einmal die Anforderungen ausgearbeitet sind.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #23
                  Zitat von RedFin Beitrag anzeigen
                  Das Problem habe ich grundsätzlich gut genug beschrieben.
                  Nein. Du hast das Problem abstrakt umschreiben und dabei den Teil hervorgehoben der unrelevant ist. Du willst Daten vergleichen. Also ist erstmal entscheidend was für Daten du wie vergleich willst. Daraus ergeben sich dann Anforderung wie diese Daten gespeichert/sturkutriert sein müssen. Das kann einerseits so aussehen dass das Rohformat schon geeignet ist oder ebend nicht. Ist das Rohformat nicht geeignet müssen die Daten noch in eine entsprechend Sturktur gebracht werden. Und jetzt überleg mal was du uns als Problem prässentierst. Undefinierte Daten, die du irgendwie vergleichen willst, liegen in Form von 1000ten XML Files mit z.T. 40.000 Elementen vor.

                  Dein Beispiel mit den Universitäten. Wo ist das Problem die relevanten Daten relational abzubilden? Eine Uni hat eine endliche Zahl an Eigenschaften und davon wird nur ein Bruchteil sinnvoll vergelichbar sein.

                  Kommentar


                  • #24
                    Zitat von erc Beitrag anzeigen
                    Eine Uni hat eine endliche Zahl an Eigenschaften
                    Das bezweifle ich. Du setzt ein Deterministisches Weltbild voraus?

                    Kommentar


                    • #25
                      [MOD] Bitte beim Thema bleiben!
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar

                      Lädt...
                      X