ich bin mir nicht ganz sicher, ob mein Thema hier rein gehört und weiß auch nicht so recht, wonach ich suchen könnte.
Fangen wir einfach Mal an, mein Problem ist schnell geschildert: Ich habe ca. 15 Mio Zahlen (4- bis 9-stellige, beliebige Werte). Weiterhin habe ich 5 verschiedene Stati, hier mal anonym "Status1" bis "Status5" genannt. Die Daten kommen aus einer MySQL-DB und sollen auf ein mobiles Gerät (Win CE) kopiert werden. Die Datenorganisation ist mir überlassen. Weiterhin soll eine Synchronisation in beide Richtungen möglich sein, die Geräte-Anzahl wird außerdem auf ca. 20-30 steigen.
Die eigentliche Anwendung ist folgende: Auf dem Gerät wird eine Nummer gescannt / eingegeben. Anhand dieser Nummer soll der Status herausgefunden, angezeigt sowie eventuell editiert werden. Am Ende des Tages werden alle Daten von allen Geräten in die DB synchronisiert, am nächsten Morgen von der DB auf alle Geräte synchronisiert.
Meine große Frage ist nun, wie ich diese Daten möglichst einfach auf dem Gerät organisieren, auch unter dem Aspekt, dass ich oft in beide Richtungen synchronisieren muss.
--
( Arbeitsverzeichnis ist "\\": )
--
Hier mein erster Ansatz:
Leere Dateien - jeder Dateiname identifiziert eine Ziffer - angenordnet nach:
\\Status1\{num1}.txt
\\Status1\{num2}.txt
...
\\Status1\{numx}.txt
\\Status2\{num1}.txt
...
\\Status5\{numn}.txt
z.B.:
\\Status1\1012.txt
\\Status1\\1179.txt
\\Status1\\124147.txt
...
\\Status1\\9941.txt
\\Status2\\11111.txt
\\Status2\\11112.txt
usw.
Vorteil: Sehr schnelle Suche (Suchergebnis ergibt sich anhand der existierenden Datei).
Nachteil: Erstellen der (15 Mio) Dateien bei DB-Export dauert ewig ; Synchronisation sehr zeitaufwendig.
--
Zweiter Ansatz:
Für jeden Status eine Datei (welche alle zugehörigen Nummern zu diesem Status enthalten). Änderungen werden in einem anderen Verzeichnis hinterlegt:
\\in\Status1.txt
\\in\Status2.txt
...
\\in\Status5.txt
---------------------------
\\out\Status1.txt
\\out\Status2.txt
...
\\out\Status5.txt
Vorteil: Der DB-Export ist sehr schnell.
Nachteil: Um eine Nummer zu finden, müssen im worst case alle Dateien durchsucht werden, was sehr lange dauern kann.
--
Dritter Ansatz:
Ähnlich wie Ansatz 2, mehr Dateien, dafür bessere Vorsortierung: Die erste Ziffer einer Nummer wird als Lookup im Verzeichnis codiert:
\\in\1\Status1.txt
\\in\1\Status2.txt
..
\\in\1\Status5.txt
\\in\2\Status1.txt
\\in\9\Status5.txt
---------------------------
\\out\1\Status1.txt
\\out\1\Status2.txt
..
\\out\9\Status5.txt
Vorteil: Für den Lookup von "54135" (also allgemein "5*") kann ich direkt nach \\in\5\ bzw. \\out\5\ navigieren und dort alle Dateien (maximal 2 x 5 Dateien) durchforsten.
Nachteil: Ich kenne die Verteilung der Nummern nicht, im worst-case beginnen sehr viele Nummern mit der gleichen Ziffer und das System geht nicht auf.
--
Den dritten Ansatz könnte man natürlich noch verfeinern indem man anstelle der ersten Ziffer die ersten beiden oder ersten drei Ziffern in Verzeichnisse codiert.
\\in\1\0\1\Status1.txt
\\in\1\0\1\Status2.txt
..
\\in\1\1\3\Status5.txt
\\in\1\4\7\Status1.txt
...
\\in\9\9\4\Status5.txt
---------------------------
\\out\1\7\2\Status1.txt
\\out\2\0\7\Status2.txt
..
\\out\9\5\0\Status5.txt
--
Ich würde gern auf eine lokale DB auf dem Gerät verzichten (u.a. aus Zeitdruck). Was fallen euch noch für Ansätze ein, die Informationen in Dateien zu organisieren?