Thema: [C#] Datensatz suchen
-
13. 10. 2011, 06:26 #1Mitglied
- Registriert seit
- Jan 2009
- Beiträge
- 172
[C#] Datensatz suchen
Guten Morgen!
Ich habe eine CSV-Datei mit rund 270.000 Datensätzen. (Kann weniger, aber auch mehr werden, ist abhängig vom Kunden) Diese Datei hat den folgenden Aufbau:
artikelnummer;artikelbezeichnung
Ich möchte die Daten gerne auf einem Windows CE Gerät abrufen. Das bedeutet ein Kunde gibt eine Artikelnummer ein, und erhält die Artikelbezeichnung ausgegeben.
Das Hauptproblem ist jetzt natürlich die Form der Speicherung. Zuerst habe ich überlegt, ob die Datenstruktur Dictionary eventuell den Zweck erfüllen würde, jedoch mache ich mir Sorgen, dass der RAM des CE Geräts der Datenmenge nicht standhalten kann.
Auch bei einer Iteration durch die CSV-Datei habe ich so meine Zweifel, da auch diese nicht wirklich schnell sein wird.
Da das Programm relativ schlank gehalten werden soll, möchte ich nicht unbedingt eine Datenbankanbedingung hinzufügen, bei der die Daten von der CSV-Datei in eine Datenbank geladen werden können und danach abgefragt werden.
Leider kann ich die Daten nicht sortiert ausgeben. Die Artikelnummern sind keine Interger sondern Strings.
Habt ihr eine Idee wie das Handling mit der Datei am besten funktionieren würde?
Liebe Grüße
-
13. 10. 2011, 06:57 #2Mitglied
- Registriert seit
- Oct 2009
- Beiträge
- 703
Re: [C#] Datensatz suchen
Das könnte in der Tat ein Problem sein - solle man vielleicht erstmal testen.
Hast du die Möglichkeit die csv datei in verschiedene Datein aufzuspalten (um sie dann erstmal nach irgendeiner Sortierung aufzuteilen)?
-
13. 10. 2011, 07:06 #3Mitglied
(Threadstarter)
- Registriert seit
- Jan 2009
- Beiträge
- 172
Re: [C#] Datensatz suchen
Die Datei wird prinzipiell über unsere eigene Warenwirtschaft generiert, das bedeutet ich müsste nur mit dem zuständigen Kollegen besprechen in welchem Format die Daten vorliegen sollen. Es muss jetzt auch nicht zwingend CSV sein.
-
13. 10. 2011, 07:19 #4Mitglied
- Registriert seit
- Oct 2009
- Beiträge
- 703
Re: [C#] Datensatz suchen
Du wirst um eine entsprechende Indexierung nicht herum kommen. Die Indexierung hilft dir aber nur wenn du die Datensätze auf mehrere cvs oder xml files aufteilen kannst und genau dort könnte man sich ja schon eine sinnvolle Aufsplitung überlegen.
-
13. 10. 2011, 07:50 #5
Re: [C#] Datensatz suchen
man kann auch strings sortieren.
-
13. 10. 2011, 08:11 #6Mitglied
(Threadstarter)
- Registriert seit
- Jan 2009
- Beiträge
- 172
Re: [C#] Datensatz suchen
Ich bin mir im Klaren, dass ich auch nach Strings sortieren/suchen kann!
Die Tatsache, dass die Artikelnummer aus Strings besteht war nur eine Zusatzinformation die ich nicht vorenthalten wollte.
-
13. 10. 2011, 09:36 #7Mitglied
- Registriert seit
- Apr 2011
- Beiträge
- 34
Re: [C#] Datensatz suchen
Für so etwas ist eine Datenbank die einfachste Lösung, wenn der Hauptspeicher nicht für die komplette Datenmege reicht oder aus anderen Gründen geschont werden sollen.
Da Du aber auf den Overhead der Datenbank verzichten willst, und es - wenn ich das richtig verstanden habe - nur ein Suchkriterium (Artikelnummer) gibt, die Genierung der Daten beeinflussbar ist und die Daten am Gerät nicht verändert werden, sind auch File(-System) basierte Ansätze denkbar :
Variante a)
Die Datei ist nach der Artikelnummer vorsortiert und in einem Fixed-Length Format.
Dann kannst Du Dich mit Binärsuche durch die Datei hanteln, da die Fileposition jedes Records berechenbar ist. Das ist ähnlich flott wie eine Datenbank.
Variante b)
Die Datei splitten und ggf. in einer Verzeichnisstruktur abbilden.
Annahme, die Artikelnummer wäre numerisch und 8 Stellen lang (ggf mit führenden Nullen auffüllen), könnte das z.B. so aussehen :
Artikelnummer 12345678 wird übersetzt in den Dateipfad <Daten>\12\34\56.csv
Diese Datei enthält dann die Artikelnummern 12345600 -12345699, also max. 100 Artikel => Datei laden und im Hauptspeicher suchen.
Wenn auch nach Artikelname gesucht werden muss, sind diese Varianten nur bedingt geeignet (a = langsam, b = langsam und kompliziert).
-
13. 10. 2011, 10:55 #8Mitglied
- Registriert seit
- Oct 2009
- Beiträge
- 703
Re: [C#] Datensatz suchen
Wie wäre es denn mit einer schöne NoSQL DB .. wobei ich nicht weiß in wieweit CouchDB/MongoDB und co auf CE laufen.

Ansonsten bleibt eben wie schon gesagt, die Daten nach einer Systematik aufzusplitten. Wenn ihr sowieso die Kontrolle der Daten inne habt, dann könntet ihr ja eine weiteren String für eine einfache Zuordnung hinzufügen.
-
13. 10. 2011, 11:43 #9
Re: [C#] Datensatz suchen
Über wie viele Datensätze reden wir denn?Zuerst habe ich überlegt, ob die Datenstruktur Dictionary eventuell den Zweck erfüllen würde, jedoch mache ich mir Sorgen, dass der RAM des CE Geräts der Datenmenge nicht standhalten kann.
In welcher Sprache willst Du das Tool denn entwickeln? Falls in C#, dann würde ich das schon in Betracht ziehen. Viel komplizierter als die anderen Vorschläge ist das dann auch nicht.möchte ich nicht unbedingt eine Datenbankanbedingung hinzufügen
Schau Dir mal SqLite an.
http://www.sqlite.org/
Und auch Microsofts antwort darauf.
http://nolovelust.com/post/Microsoft...Edition-4.aspx
-


Zitieren
mehr lesen...







Microsoft: Windows 8 OEM...
Heute, 14:12 in gulli:news