Nach bestimmten Vorkommen in großer CSV suchen
DPhil
- datenbank
- javascript
- meinung
Hallo zusammen,
ich habe mal eine konzeptionelle Frage. Ich habe eine Produkt-CSV-Datei mit ca. 5.000 Einträgen.
Ziel ist es, über ein Webformular nach einem Produktnamen zu suchen und als Ergebnis die zugehörigen Informationen auszuwerfen. Pro Zeile enthält die CSV Datei einen Datensatz mit 3 Informationen, durch Kommas separiert.
Es steht keine SQL oder noSQL Lösung zur Verfügung.
Mein Ansatz wäre nun folgender:
Ist diese Vorgehensweise vom Grundsatz her sinnvoll oder habe ich hier was vollkommen falsch verstanden?
Danke für die Hinweise...
Phil
Hallo,
Ich habe eine Produkt-CSV-Datei mit ca. 5.000 Einträgen.
Ist das eine einmalige Angelegenheit, oder wird diese CSV-Datei immer mal wieder neu erstellt?
Ziel ist es, über ein Webformular nach einem Produktnamen zu suchen und als Ergebnis die zugehörigen Informationen auszuwerfen. Pro Zeile enthält die CSV Datei einen Datensatz mit 3 Informationen, durch Kommas separiert.
Im Prinzip kann PHP mit CSV umgehen.
Es steht keine SQL oder noSQL Lösung zur Verfügung.
Im Prinzip ist das eine Aufgabe für eine DB.
Mein Ansatz wäre nun folgender:
- Bereitstellung der Produktinformationen im JSON Format auf dem Server
- Anfrage vom Client mittels AJAX auf dem Server
- Gefundene Ergebnisse werden an den Client geliefert und auisgegeben
Ist diese Vorgehensweise vom Grundsatz her sinnvoll oder habe ich hier was vollkommen falsch verstanden?
Das sieht erstmal ok aus, aber JSON != CSV
Gruß
Kalk
Hallo Kalk,
Hallo,
Ich habe eine Produkt-CSV-Datei mit ca. 5.000 Einträgen.
Ist das eine einmalige Angelegenheit, oder wird diese CSV-Datei immer mal wieder neu erstellt?
Die Datei wird ab und an erweitert.
Ziel ist es, über ein Webformular nach einem Produktnamen zu suchen und als Ergebnis die zugehörigen Informationen auszuwerfen. Pro Zeile enthält die CSV Datei einen Datensatz mit 3 Informationen, durch Kommas separiert.
Im Prinzip kann PHP mit CSV umgehen.
Es steht keine SQL oder noSQL Lösung zur Verfügung.
Im Prinzip ist das eine Aufgabe für eine DB.
Ja, ich würde das auch bevorzugen.
Mein Ansatz wäre nun folgender:
- Bereitstellung der Produktinformationen im JSON Format auf dem Server
- Anfrage vom Client mittels AJAX auf dem Server
- Gefundene Ergebnisse werden an den Client geliefert und auisgegeben
Ist diese Vorgehensweise vom Grundsatz her sinnvoll oder habe ich hier was vollkommen falsch verstanden?
Das sieht erstmal ok aus, aber JSON != CSV
Die Konvertierung in JSON wäre dann ein überflüssiger Schritt?
Gruß
Kalk
Danke und Gruß
Phil
Hallo DPhil,
- Bereitstellung der Produktinformationen im JSON Format auf dem Server
Das würde ich mir überlegen. CSV kann problemlos zeilenweise geparsed werden, will heissen, du musst nicht die komplette Datei durchgehen bevor du suchen kannst, jeder CSV-Parser kann das. Bei JSON sieht das etwas anders aus.
LG,
CK
Hallo CK,
Hallo DPhil,
- Bereitstellung der Produktinformationen im JSON Format auf dem Server
Das würde ich mir überlegen. CSV kann problemlos zeilenweise geparsed werden, will heissen, du musst nicht die komplette Datei durchgehen bevor du suchen kannst, jeder CSV-Parser kann das. Bei JSON sieht das etwas anders aus.
Möglicherweise kommt ein Produktname mehrfach mit unterschiedlichen Informationen vor. Oder es wird nach Artikelnummern gesucht, die unter Umständen mehrach vergeben sind. Die Datei müsste also komplett durchgeparsed werden.
Ist das zeilenweise parsen der CSV auch bei größeren Datenmengen (max. 20.000 Zeilen) noch performant oder wäre hierfür die Vorgehendweise völlig daneben?
LG,
CK--
> CK kennt Wayne Vielen Dank Phil
Vielen Dank
Phil
Hallo DPhil,
Das würde ich mir überlegen. CSV kann problemlos zeilenweise geparsed werden, will heissen, du musst nicht die komplette Datei durchgehen bevor du suchen kannst, jeder CSV-Parser kann das. Bei JSON sieht das etwas anders aus.
Möglicherweise kommt ein Produktname mehrfach mit unterschiedlichen Informationen vor. Oder es wird nach Artikelnummern gesucht, die unter Umständen mehrach vergeben sind. Die Datei müsste also komplett durchgeparsed werden.
Ja, aber du kannst die Zeilen, die du nicht brauchst, verwerfen und musst nicht die ganze Datei im Speicher halten.
Ist das zeilenweise parsen der CSV auch bei größeren Datenmengen (max. 20.000 Zeilen) noch performant oder wäre hierfür die Vorgehendweise völlig daneben?
Ich halte es für sinnvoller hier Zeilenweise vorzugehen als die ganze Datei im Speicher zu halten. Aber bei 20k Zeilen wirst du natürlich eine gewisse Zeit brauchen um das durchzuackern.
LG,
CK
Moin!
Ist das zeilenweise parsen der CSV auch bei größeren Datenmengen (max. 20.000 Zeilen) noch performant oder wäre hierfür die Vorgehendweise völlig daneben?
Es könnte sich lohnen, ab einer bestimmten Größe/Zeilenanzahl Spezialisten wie grep in einer subshell ranzulassen. Wo diese liegt ist schlecht zu sagen, weil das von sehr vielen Umständen abhängt. Aber bei 20.000 Zeilen würde ich das testen wollen.
Jörg Reinholz
20.000 Zeilen sind nicht viel.
Beispielsweise dauert eine mit Perl auf die Datei UnicodeData.txt aufgesetzte Volltextsuche mit Text::Query ungefär 200ms je nach System (gesamte Antwortzeit der Suche über eine Webanwendung).
Die Datei: UnicodeData.txt hat aktuell eine Größe von 1.4 MB und 25.000 Zeilen als CSV. Das Unicode-Konsortium publiziert diese Datei.
--Dag
Hallo Phil, Warum noch JSON? da ich vor kurzem etwas ähnliches umgesetzt hatte, eine kurze Info dazu. Meine Intranet Anwendung sucht in einer CSV mit ca. 10 000 Einträgen (original 50 000, aber gesplittet) nach Werten innerhalb der CSV. Ich lese die CSV ein mit;
while (($csv_line = fgetcsv($fp, filesize("meine.csv"), ";")) !== FALSE)//CSV mit Semikolon
..
Danach kannst du die einzelnen "Spalten" gezielt ansprechen wie etwa $csv_line[0]
, $csv_line[1]
..
Event. noch aufpassen wegen der Codierung der CSV und wegen BOM!
Gruss hawk