Hallo,
ich versuche schon seit geraumer Zeit eine XML-Datei von ca. 4MB größe in angemessener Zeit von ca. 2-4sec zu durchsuchen. Bisher hatte ich leider weder mit dem Suchalgo noch mit der benötigten Zeit erfolg. Der durchlauf dauerte ca. 10sec. auf einem 1GHz Rechner.
Es handelt sich um folgende Datenstruktur:
<Bauteilkatalog>
<Bauteil ID="SIC22323">
<Details>
<Beschreibung1>Beschreibung1 des Bauteils</Beschreibung1>
<Beschreibung2>Beschreibung2 des Bauteils</Beschreibung2>
<Einsatz>Gerät 4223</Einsatz>
</Details>
<PDF>
<Bauvorschrift>CBV\SIC22323.pdf</Bauvorschrift>
<Datenblatt>CDB\SIC22323.pdf</Datenblatt>
</PDF>
</Bauteil>
<Bauteil ID="SIC11323">
<Details>
<Beschreibung1>Beschreibung1 des Bauteils</Beschreibung1>
<Beschreibung2>Beschreibung2 des Bauteils</Beschreibung2>
<Einsatz>Gerät 1113</Einsatz>
</Details>
<PDF>
<Bauvorschrift>CBV\SIC11323.pdf</Bauvorschrift>
<Datenblatt>CDB\SIC11323.pdf</Datenblatt>
</PDF>
</Bauteil>
</Bauteilkatalog>
Es handelt sich also um einen Bauteilkatalog mit ca. 4000 eingetragenen Bauteilen.
Dafür gibt es eine Web-Oberfläche, die die Eingabe eines Suchbegriffs ermöglicht. Wenn jetzt jemand z. B. "Gerät 1113" eingeben sollte, müssten ALLE <Details> des Bauteiles SIC11323 sowie die Tags unter <PDF> auf dieser Webseite als Suchergebnis erscheinen.
Bisher machte ich folgenden Ansatz:
1. Benutzte Standard-Parser mit startElement, endElement, cdata
2. übergab die Variable $startElement an Funktion cdata
3. Zwischenspeichern aller Elemente eines Bauteils (also von <Bauteil ID...> bis </Bauteil> in ein Array.
3. überprüfte jede Zeile in der Funktion cdata auf den Suchinhalt
4. Wenn Suchinhalt ingendwann bis Ende des Bauteils gefunden, übergebe Array an Zeigefunktion
Da aber die Cdata Funktion pro Tag mehrmals aufgefufen wird, bekomme ich keine sinnvolle Ergebnisse.
Weiterhin dauert der Suchdurchlauf durch das Zwischenspeichern und vermutlich durch das durchsuchen der Strings eine ganz schön lange Zeit.
Würde mich sehr freuen wenn mir jemand zu diesem Problem einen hilfreichen Tip hättte... Auch wenn es nicht schneller geht, eine idee für einen Suchalgo wäre klasse.
Danke,
Joachim Schneider
ich versuche schon seit geraumer Zeit eine XML-Datei von ca. 4MB größe in angemessener Zeit von ca. 2-4sec zu durchsuchen. Bisher hatte ich leider weder mit dem Suchalgo noch mit der benötigten Zeit erfolg. Der durchlauf dauerte ca. 10sec. auf einem 1GHz Rechner.
Es handelt sich um folgende Datenstruktur:
<Bauteilkatalog>
<Bauteil ID="SIC22323">
<Details>
<Beschreibung1>Beschreibung1 des Bauteils</Beschreibung1>
<Beschreibung2>Beschreibung2 des Bauteils</Beschreibung2>
<Einsatz>Gerät 4223</Einsatz>
</Details>
<PDF>
<Bauvorschrift>CBV\SIC22323.pdf</Bauvorschrift>
<Datenblatt>CDB\SIC22323.pdf</Datenblatt>
</PDF>
</Bauteil>
<Bauteil ID="SIC11323">
<Details>
<Beschreibung1>Beschreibung1 des Bauteils</Beschreibung1>
<Beschreibung2>Beschreibung2 des Bauteils</Beschreibung2>
<Einsatz>Gerät 1113</Einsatz>
</Details>
<PDF>
<Bauvorschrift>CBV\SIC11323.pdf</Bauvorschrift>
<Datenblatt>CDB\SIC11323.pdf</Datenblatt>
</PDF>
</Bauteil>
</Bauteilkatalog>
Es handelt sich also um einen Bauteilkatalog mit ca. 4000 eingetragenen Bauteilen.
Dafür gibt es eine Web-Oberfläche, die die Eingabe eines Suchbegriffs ermöglicht. Wenn jetzt jemand z. B. "Gerät 1113" eingeben sollte, müssten ALLE <Details> des Bauteiles SIC11323 sowie die Tags unter <PDF> auf dieser Webseite als Suchergebnis erscheinen.
Bisher machte ich folgenden Ansatz:
1. Benutzte Standard-Parser mit startElement, endElement, cdata
2. übergab die Variable $startElement an Funktion cdata
3. Zwischenspeichern aller Elemente eines Bauteils (also von <Bauteil ID...> bis </Bauteil> in ein Array.
3. überprüfte jede Zeile in der Funktion cdata auf den Suchinhalt
4. Wenn Suchinhalt ingendwann bis Ende des Bauteils gefunden, übergebe Array an Zeigefunktion
Da aber die Cdata Funktion pro Tag mehrmals aufgefufen wird, bekomme ich keine sinnvolle Ergebnisse.
Weiterhin dauert der Suchdurchlauf durch das Zwischenspeichern und vermutlich durch das durchsuchen der Strings eine ganz schön lange Zeit.
Würde mich sehr freuen wenn mir jemand zu diesem Problem einen hilfreichen Tip hättte... Auch wenn es nicht schneller geht, eine idee für einen Suchalgo wäre klasse.
Danke,
Joachim Schneider
Kommentar