T
tuxedo
Gast
Hallo zusammen,
ich beschäftige mich gerade mit dem Speichern von Datensätzen in einer File und dem "schnellen wiederfinden" dergleichen.
Bei Datenbanken gibt's IDs. Bei Dateisystemen den Dateinamen. Das ganze möchte ich jetzt mit Java innerhalb einer eigenen Datei auf die gleiche Weise machen: Also Datensatz anhand seines Hashs/seiner ID (UUID?) in eine File schreiben und auch wiederfinden ...
Hab mal geschaut wie das bei der HashMap funktioniert:
Da wird der "key" gehashed und mit einer Shift-Operation über die aktuelle Länge/Größe des Datenarrays ein Index ausgerechnet. Ist es Zeit das Array zu vergrößern (weil langsam kein Platz mehr ist), so wird ein doppelt so großes Array erzeugt, und alle Indizes mit der neuen Array-Größe neu berechnet und die Daten umsortiert.
Klingt super. Nur geht das bei einer File nicht ohne jede Menge IO-Operationen: Wenn ich 1.000.000 Einträge in der File habe und die File, sagen wir 100MB groß ist und es jetzt an der Zeit wäre die Dateigröße zu verdoppeln, dann müsste ich 1Mio Einträge mit einer Kapazität von etwa 100MB innerhalb der Datei umkopieren... --> Sehr unschön.
Hat jemand nen Plan wie das DBs machen? Ja, ich weiß, da steckt jede Menge intelligenter Code und viele super-intelligente Algos drinnen. Aber es muss doch da eine "brauchbare" kleine Lösung für geben?
Ich stell mir vor dass das beim Dateisystem auch recht "einfach" geht: Hat man den Namen und Pfad zur File, weiß man wo sie sich befindet. Okay: Bei einer Datei ist das ja auch so: Weiß man an welchem Index in der Datei sich ein Datensatz befindet, hat man ihn. Ich Muss jetzt nur eine ID/Hash/... auf die Position abbilden :-( (einfacher gesagt als getan ...)
Einfach die File so groß machen dass ich sie nie vergrößern muss wäre u.U. Platzverschwendung auf der einen Seite, und auf der anderen Seite "einengung", da der Platz ja "begrenzt" ist...
Any ideas? Mir fehlt das eine oder andere Schlagwort um mit google weiter zu kommen...
- Alex
P.S. Mir geht's hauptsächlich um den Lerneffekt.
P.P.S. Nein, nicht den dass man sowas nicht selbst machen sollte ...Den anderen mit dem "verstehen wie's funktioniert"...
ich beschäftige mich gerade mit dem Speichern von Datensätzen in einer File und dem "schnellen wiederfinden" dergleichen.
Bei Datenbanken gibt's IDs. Bei Dateisystemen den Dateinamen. Das ganze möchte ich jetzt mit Java innerhalb einer eigenen Datei auf die gleiche Weise machen: Also Datensatz anhand seines Hashs/seiner ID (UUID?) in eine File schreiben und auch wiederfinden ...
Hab mal geschaut wie das bei der HashMap funktioniert:
Da wird der "key" gehashed und mit einer Shift-Operation über die aktuelle Länge/Größe des Datenarrays ein Index ausgerechnet. Ist es Zeit das Array zu vergrößern (weil langsam kein Platz mehr ist), so wird ein doppelt so großes Array erzeugt, und alle Indizes mit der neuen Array-Größe neu berechnet und die Daten umsortiert.
Klingt super. Nur geht das bei einer File nicht ohne jede Menge IO-Operationen: Wenn ich 1.000.000 Einträge in der File habe und die File, sagen wir 100MB groß ist und es jetzt an der Zeit wäre die Dateigröße zu verdoppeln, dann müsste ich 1Mio Einträge mit einer Kapazität von etwa 100MB innerhalb der Datei umkopieren... --> Sehr unschön.
Hat jemand nen Plan wie das DBs machen? Ja, ich weiß, da steckt jede Menge intelligenter Code und viele super-intelligente Algos drinnen. Aber es muss doch da eine "brauchbare" kleine Lösung für geben?
Ich stell mir vor dass das beim Dateisystem auch recht "einfach" geht: Hat man den Namen und Pfad zur File, weiß man wo sie sich befindet. Okay: Bei einer Datei ist das ja auch so: Weiß man an welchem Index in der Datei sich ein Datensatz befindet, hat man ihn. Ich Muss jetzt nur eine ID/Hash/... auf die Position abbilden :-( (einfacher gesagt als getan ...)
Einfach die File so groß machen dass ich sie nie vergrößern muss wäre u.U. Platzverschwendung auf der einen Seite, und auf der anderen Seite "einengung", da der Platz ja "begrenzt" ist...
Any ideas? Mir fehlt das eine oder andere Schlagwort um mit google weiter zu kommen...
- Alex
P.S. Mir geht's hauptsächlich um den Lerneffekt.
P.P.S. Nein, nicht den dass man sowas nicht selbst machen sollte ...Den anderen mit dem "verstehen wie's funktioniert"...