Welche Möglichkeiten bietet Java um Records in Dateien zu sp

Status
Nicht offen für weitere Antworten.
I

ixanos

Gast
Welche Möglichkeiten bietet Java um Records in Dateien zu speichern und auszulesen?

--------------------------------------------------------------------------------

Hallo zusammen

Ich habe folgende Record-Struktur:

Record:
int a1;
int[] a2;

Beispiel: Record No1 = 14,{15,25,36}
Record No2 = 67,{15,25,36,45,56,78,89}

Ich möchte diese Records in eine Datei speichern können und dann aber auch die Möglichkeit haben auf beliebiges Record zuzugreifen. Die Datei würde im Regelfall 500.000 Records haben.Und ein normales Szenario wäre zu sagen: Gib mir Das Record No 123000 und es sollte dann etwas in folgender Form zurückgeben: 78, {45,23}. also einen int und ein Array von ints (genaue anzahl variiert von 1 bis 100.000 oder mehr !!!).

RandomAccessFile nehme ich an, kann hier nicht eingesetzt werden da man nicht wissen würde bei welches Byte man anfangen muss zu lesen. Man würde nicht wissen wo das 123000 Record anfängt da das array in jedem Record eine variierende Länge hat, und eins nach dem anderen alle Records auslesen bis das 123000e kommt ist auch keine realistische Lösung.

Hat jemand von euch schonmal so eine Problematik gehabt? Wie sollte man hier vorgehen? Die Datei ist viel zu gross um davon auszugehen dass man genug Speicher hat um diese in ein ArrayList oder Vector zu laden!

Gruss
Ioannis
 
S

SlaterB

Gast
viele Menschen hatten schon solche Problem und erfanden sich ein mysteriöses Spezialprogramm,
wie hieß es nochmal? ach ja, Datenbank! ;)

du kannst es natürlich auch in einer Datei speichern,
am besten mit einer Index-Datei dazu, 500.000 mal x Bytes lang,

um den 123.000 Eintrag zu finden, gehe an eine ausrechenbare Position in die Indexdatei,
lies dort die Position in der Hauptdatei, vielleicht noch die Anzahl der zu lesenen Bytes,
und greife in der Hauptdatei auf die richtige Stelle zu,

deine seltsame Struktur kannst du zumindest zum Speichern als ein einzelnes int-Array darstellen, Position 0 enthält die Nummer
 
I

ixanos

Gast
wenn ich eine index-datei anlegen würde um über diese auf die Hauptdatei zuzugreifen dann würde jede Änderung z.B. des 101 Records ein update für die restlichen 500.000 - 101 Records verursachen. Die Index Datei müsste dann praktisch neu kreiert werden sobald ein einziges Record modifiziert würde, da ja dann die Anfang-Offsets aller Records die nach dem 101 Record sind, nicht mehr stimmen würden.

ich wollte die Datenbank-Lösung erstmal nicht berücksichtigen da dieses die Portabilität der Datei beeinträchtigen würde. Es kann aber sein dass diese unvermeindbar werden wird :(
 
S

SlaterB

Gast
dass sich die Offsets ändern, ist ein Problem der Hauptdatei, nicht der Indexdatei ;)
dort wird nur der Aufwand sichtbar, dies zu verwalten

du könntest ein inkrementelles System einführen,
du hast die Indexdatei, die vielleicht alle x-tausend Änderungen neu aufgebaut wird,
nebenbei hast du noch ein Datei mit den Änderungen (und/ oder im Arbeitsspeicher)
da steht dann 'in Hauptdatei alles nach Position 234.900 um 4020 Bytes nach rechts verschoben'

zur Bestimmung einer Position also den Index aus der Datei lesen und noch im Arbeitsspeicher 1-1000 Schritte durchlaufen,
von denen vielleicht 900 die Position hin und her schupsen,

mit etwas Mühe kannst du vielleicht auch im Hauptspeicher die Änderungen etwas voranalysieren,
so dass für bestimmte Bereiche der Hauptschups schon vorberechnet ist und nur noch 10 Detailschritte berücksichtigt werden müssen

(die 1000 Hauptschupse müssten bei jeder Änderung aktualisiert werden, quasi als Mini-Abbild des Index-Aktualisierens-Problem)


-------
wenn du eh Einträge nur einzeln liest, dann ist generell zu überlegen,
ob du die 500000 Einträge nicht lieber auf 50-500 einzelne Dateien aufteilst,
würde die obigen Probleme um den Faktor 50/ 500 verringern
(aber vielleicht neue machen ;) )
 
I

ixanos

Gast
ja. Es ist eine gute Idee, neben der Indexdatei auch eine "Modifications"-Datei anzulegen und ab und zu eine optimierung (Neu-Aufbau der Haupt- und Indexdatei vorzunehmen).

Nur zur Info es handelt sich hier um einen Inverted-Index und das array zeigt die Positionen eines Wortes (Term) innerhalb einer Datei. Deswegen muss man davon ausgehen dass man auf mehrere Records zugreifen würde und nicht nur auf ein einzelnes.
 

Tellerrand

Bekanntes Mitglied
wenn ich eine index-datei anlegen würde um über diese auf die Hauptdatei zuzugreifen dann würde jede Änderung z.B. des 101 Records ein update für die restlichen 500.000 - 101 Records verursachen. Die Index Datei müsste dann praktisch neu kreiert werden sobald ein einziges Record modifiziert würde, da ja dann die Anfang-Offsets aller Records die nach dem 101 Record sind, nicht mehr stimmen würden.

Da hiltft zum Beispiel die Einteilung in Blöcke, man teilt also die "Hauptdatei" so auf:
| Inhalt | Blocknumnmer |
Falls ein Eintrag größer ist als die Größe des "Inhalt" Feldes, so nimmt man einfach einen zusätzlichen Block und referenziert ihn als Blocknummer im alten.
Auslesen funktioniert dann nach dem Motto: Lese Inhalt -> Wenn Blocknummer nicht 0 lese den durch "Blocknummer" referenzierten Block.

(Die Größe des "Inhalt" - Feldes ist dann alelrdings immer ein Kompromis zwischen Speicherplatzverschwendung und Zugriffszeit.)

Um nun durch den Löschvorgang keinen Speicherplatz zu verschwenden kann man das selbe Prinziep verwenden, so dass die Blocknummer von leeren Blöcken dann auf den jeweils nächsten leeren Block zeigt.
 
I

ixanos

Gast
Ja. Blocks zu benutzen ist eine sehr gute Idee! somit wäre eine Modifikationsdatei nicht mehr notwendig und man könnte mit einer einzigen Datei auskommen. Man könnte dann auch zusäzlich Golomb Coding benutzen um die integers zu komprimieren, somit wäre der benötigte Platz noch weniger. gute Idee. danke.
 
S

SlaterB

Gast
wenn die ersten x00.000 Blöcke für den ersten Block jedes Eintrags reserviert sind und es auch nicht mehr Einträge werden als an Reserve freigelassen ist,
dann fällt auch die Indexdatei weg
 
I

ixanos

Gast
Ja. Stimmt! Dann wäre auch die Indexdatei überflüssig.
einziger Nachteil hier dass die Offests alle erst ab x00.001 erscheinen würden und deswegen Grosse Zahlen verwendet werden würden. Da ist dann die Komprimierung notwendig. Aber ist sicherlich eine sehr gute Idee.
 
S

SlaterB

Gast
naja, wenn alle Offsets über x00.000 liegen, dann kann diese Zahl ja weglassen
und als konstanten Faktor dazurechnen ;)

aber die zusätzlichen Blocks dürften doch so zahlreich sein, dass sie eh von 1 aus schnell in dieser Region sind,
anderenfalls wird wohl soviel Platz freigelassen, dass der Platz für die eine Blockzahl zigfach übertroffen wird ;),

na das kann man ewig weiterspinnen
 
I

ixanos

Gast
Hallo

Ich möchte mich bei euch ("SlaterB" und "Tellerrand") für eure Unterstützung bedanken.
Dieses Thema ist für mich jetzt als Thread abgeschlossen.

Gruss
Ioannis
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Videokonferenz mittel Java ? Welche Möglichkeiten habe ich ? Allgemeine Java-Themen 2
F SuppressWarnings("xxx") - welche Möglichkeiten gib Allgemeine Java-Themen 4
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
P Feststellen, Welche Classes ich aus einem JAR nutze? Allgemeine Java-Themen 6
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
F Java Web App - welche Technologien? Allgemeine Java-Themen 11
S Welche API? Allgemeine Java-Themen 6
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
K Welche Zertifizierung passt? Allgemeine Java-Themen 10
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
J Welche Layouts benutzt ihr? Allgemeine Java-Themen 2
G Wiedereinstieg, welche Java Version empfehlt ihr Allgemeine Java-Themen 7
M Welche Exceptionbehandlung ist sinnvoll? Allgemeine Java-Themen 3
H NetBeans geotools 15 oder 16 - welche Abhängingkeiten gibt es? Welche Jars brauche ich? Allgemeine Java-Themen 4
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
S Welche Nutzen bringen Lamda Expressions? Allgemeine Java-Themen 1
M Welche Umgebung und Frameworks für mich als Umsteiger Allgemeine Java-Themen 6
C Welche Styleconvention Allgemeine Java-Themen 0
ruutaiokwu datenstruktur welche sich "im kreis" dreht Allgemeine Java-Themen 26
R LinkedList und Threads - welche Methode ist besser? Allgemeine Java-Themen 2
F Welche Systeme für hoch skalierbare Webanwendung? Allgemeine Java-Themen 7
Landei Welche Klassen fehlen im JDK? Allgemeine Java-Themen 18
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
G Welche Datenstruktur? Allgemeine Java-Themen 19
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
R Welche waren eure ersten Projekte? Allgemeine Java-Themen 10
G Wie kann man sehen, welche Applikationen mit java arbeiten? Allgemeine Java-Themen 17
L Social Media Webportal -> Welche Technologie (JEE, GWT) Allgemeine Java-Themen 8
J Welche Informationen werden beim Kompilieren gespeichert? Allgemeine Java-Themen 3
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
vladimir Welche API für Grafik und Drag&Drop Allgemeine Java-Themen 3
schlingel Plugin-Architektur - Welche nehmen? Allgemeine Java-Themen 6
U Welche 2D-API? Allgemeine Java-Themen 4
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
M Welche Dateiformate kann Java einlesen?? Allgemeine Java-Themen 26
E Neues Projekt - Welche GUI / IDE /Techniken / etc. Allgemeine Java-Themen 14
E Welche Icons für sichtbar /unsichtbar Allgemeine Java-Themen 2
J Welche Lösung für Servlets und JSPs in Eclipse? Allgemeine Java-Themen 5
N Für welche Art von Berechnungen macht JCUDA Sinn? Allgemeine Java-Themen 12
A Welche Exception verwenden? Allgemeine Java-Themen 2
T Welche Art von Hilfe?? Allgemeine Java-Themen 5
N welche run.bat? Allgemeine Java-Themen 3
R Assoziativer Speicher welche Unterschiede? Allgemeine Java-Themen 5
Developer_X Welche Dateien kann Java laden? Allgemeine Java-Themen 9
G Welche Schreibeweise ist richtig Allgemeine Java-Themen 16
ARadauer welche java version wird benutzt Allgemeine Java-Themen 4
E Welche Java-Version kennt isEmpty() ? Allgemeine Java-Themen 2
F Welche dicken Java-Bücher kennt ihr? Allgemeine Java-Themen 31
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K [erledigt] JVM welche läuft Allgemeine Java-Themen 9
G synchronized-Sclüsselwort: welche Reihenfolge zum Betreten? Allgemeine Java-Themen 6
E welche standalone Version von Tomcat benutzen? Allgemeine Java-Themen 6
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
F welche Datenstruktur? Allgemeine Java-Themen 9
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
P welche jar enthält was? Allgemeine Java-Themen 5
F Welche Datenstruktur Allgemeine Java-Themen 2
V Welche Oberfläche empfehlt ihr mir? Allgemeine Java-Themen 19
Z Welche Datenstruktur verwende ich h_ier bloss ? Allgemeine Java-Themen 14
S Welche jar's werden wirklich benötigt?` Allgemeine Java-Themen 5
G Dateien löschen welche vor heute erstellt wurden? Allgemeine Java-Themen 7
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
B Drucken - welche Bibliothek favorisiert Ihr? Allgemeine Java-Themen 16
J Welche Daten für Ative-X Funktion? Allgemeine Java-Themen 5
P welche java version für javax.mail? Allgemeine Java-Themen 7
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
B Welche Java-Version? Allgemeine Java-Themen 7
S Welche Javaversion ist in meinem Linux? Allgemeine Java-Themen 2
M 2 Javaversionen welche aktiv? Allgemeine Java-Themen 3
C Datumsfelder auslesen - egal welche Zeitzone Allgemeine Java-Themen 2
R Welche Exception bei write() nehmen Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
L Welche Collection ist die richtige ? Listen mergen Allgemeine Java-Themen 3
S Welche Datenstruktur passt bei mir? Allgemeine Java-Themen 6
D Welche Datenstruktur? Allgemeine Java-Themen 2
B Grafische Oberfläche - Welche Komponenten? Allgemeine Java-Themen 5
T JMF, welche Codecs gibts, und vor allem, wo? Allgemeine Java-Themen 9
H Welche Scriptsprache verwendet ihr in Java Allgemeine Java-Themen 9
G Welche Referenzsoftware ist in Java geschrieben? Allgemeine Java-Themen 8
P Welche Collection verwenden? Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
J Anzahl von Möglichkeiten zur Verteilung von Kugeln in Behälter Allgemeine Java-Themen 3
D HTMLUnit Möglichkeiten? Allgemeine Java-Themen 3
S Einschätzen der Möglichkeiten Allgemeine Java-Themen 5
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
G Möglichkeiten aufliste - Wie? Allgemeine Java-Themen 25
T Möglichkeiten der Kommunikatin zwischen Plugins in Ecl. RCP Allgemeine Java-Themen 3
B Möglichkeiten ein Java Programm auf einem Server auszuführen Allgemeine Java-Themen 30
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
J Funktion alle Möglichkeiten berücksichtigen Allgemeine Java-Themen 5
G möglichkeiten java? Allgemeine Java-Themen 4
A Umstellung eines(riesen)Programmes auf Java:Was bietet Java Allgemeine Java-Themen 18
R Ladefortschritt - bietet das diese Quelltextvorlage? Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben