Stream-basierter Cache

JuVman5KL

Mitglied
Hallo zusammen,
ich suche nach einem Cache-Framework, mit dem ich den Inhalt von Dateien verwalten kann, von denen einige mit Sicherheit nicht in den Arbeitsspeicher passen und die in meiner Anwendung ausschließlich mit Streams verarbeitet werden. Die dazugehörigen Dateien sollen zusammen einen bestimmten Speicherplatz auf der Festplatte (als Dateien oder in einem Datenbank-Backend) verbrauchen und dann mit einer Verdrängungsstrategie (LRU, LFU, etc.) gelöscht werden. Das Interface zum Cache muss also in jedem Fall eine Möglichkeit bieten, die Daten Stream-basiert rein- und rauszubekommen.
Hat jemand schonmal von etwas Brauchbarem in die Richtung gehört?

Beste Grüße,
Kalle Richter
 

dzim

Top Contributor
Wenn ich mich jetzt recht entsinne, bedingt das Öffnen eines FileInputStreams o.ä. nicht automatisch, dass die Datei zuvor auch komplett in den Speicher geschauffelt wurde. Mit den #read-Methoden kannst du ja nur einen bestimmten Abschnitt lesen. Ok, wenn du hier liest wird natürlich was in den Speicher geholt, bis die GC das wieder aufräumt.

Alternativ kannst du natürlich RandomAccesFile verwenden - hier kannst du wirklich enorm schnelle Zugriffe auf ein File realisieren (Beispiel: Die in Linux recht verbreiteten GeoIP-Daten von Maxmind können mit einer Java-API angesprochen werden. Dort wird genannte RandomAccesFile verwendet. Bei meinem alten Arbeitgeber hab ich das mal in produktiven Einsatz gehabt und es waren dadurch mehrere 1000 Dateizugriffe pro Sekunde möglich).

Darüber hinaus kannst du dir auch aus der Klasse einen FileChannel geben lassen, der wohl ein SeekableByteChannel ist und dir damit ähnliche Eigenschaften geben dürfte...

Einziges "Problem" an der Sache: Du musst das Binärformat der Datei kennen/im Griff haben.
 

dzim

Top Contributor
BTW: Du kannst natürlich auch mit der etwas moderneren API aus dem Packet "java.nio.file.*" arbeiten...
 

JuVman5KL

Mitglied
Hallo dzim,
danke für Deine Antwort! Mir ist noch nicht ganz klar, wie ich damit das Problem überwinden kann, dass die Objekte, die der Cache verwaltet zwar im Speicher nur Infos zum Zugriff halten (z.B. ein InputStream mit aktueller Position und ein bisschen bytecode zum Holen des nächsten Pufferinhalts), die Verdrängungsstrategie sich aber ja nicht auf die Größe dieser Objekte beziehen soll, sondern auf die Dateien, für die sie geöffnet wurden). Ich glaube da macht es keinen Unterschied, ob ich (File)InputStream verwalte oder java.nio-Objekt, da das Problem dasselbe ist.
Der GC nutzt nichts, weil die Verdrängung auf der Festplatte stattfinden soll, aber nicht, sobald ein Stream geschlossen und seine Resourcen evtl. vom GC freigegeben werden.

Meine Ansätze waren bisher ehcache mit eigener Sizeof-Implementierung (SizeOf (ehcache 2.8.1 API)), aber das ist nur die Notlösung, wenn es das Rad, das ich nicht neu erfinden will, noch nicht gibt. Auch JCS's auxillary disk cache mit Datenbank-Backend habe ich mir angeschaut (JCS - JDBC Disk Cache), aber es gibt dort keine Möglichkeit die Daten mittels Streams in die DB zu bekommen.
 

dzim

Top Contributor
Ok. Vielleicht aber verstehe ich auch aufgrund der Menge an Buzzword nicht ganz, worauf du eigentlich hinaus willst :p
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KonradN SonarLint: Resources should be closed bei Stream<T>? Allgemeine Java-Themen 6
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
looparda Stream mit Sonderbehandlung des ersten Elements Allgemeine Java-Themen 17
R Java Stream: Ist es möglich, einen stream zusammenzufassen Allgemeine Java-Themen 6
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
M stream.Collectors Fehlermeldung Allgemeine Java-Themen 1
C TCP Server und BufferedReader Leerstring im Stream? Allgemeine Java-Themen 5
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
Y Liste in Stream Packen Allgemeine Java-Themen 1
N Java stream filtern. Allgemeine Java-Themen 19
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
N javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Allgemeine Java-Themen 3
N [stream-api] Parameter pro Typ zählen Allgemeine Java-Themen 1
D IP-Cam live stream speichern Allgemeine Java-Themen 9
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
D Klassen Zeit aus NMEA-Stream in SimpleDateFormat Allgemeine Java-Themen 17
J Stream-Murks! Allgemeine Java-Themen 18
T Problem mit gzip Stream und Ende der Datei Allgemeine Java-Themen 2
JAVATUX Java Programm mit ATI Stream Unterstützung Allgemeine Java-Themen 3
X Audio Internet-Stream Allgemeine Java-Themen 2
B Stream Verständnisproblem Allgemeine Java-Themen 2
P Mime Type aus Stream lesen Allgemeine Java-Themen 5
C Bit Stream Klasse Allgemeine Java-Themen 9
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
M PCL Stream lesen und schreiben Allgemeine Java-Themen 6
musiKk Stream zum Lesen von Dateien mit seek und peek Allgemeine Java-Themen 2
J Problem mit Scanner-Stream Allgemeine Java-Themen 2
O Stream unvollständig Allgemeine Java-Themen 3
0 Stream/Datei an VLC übergeben und abspielen Allgemeine Java-Themen 10
B getImage() vom Stream oder File Allgemeine Java-Themen 3
N Werte Von C++ nach Java über den Stream möglich? Allgemeine Java-Themen 8
S Stream ReadLine() Allgemeine Frage Allgemeine Java-Themen 5
S Stream ohne Referenz kopieren ? Allgemeine Java-Themen 4
D FileInputStream bzw. BufferedInput Stream Puffern Allgemeine Java-Themen 6
G Live-Stream einer WebCam importieren Allgemeine Java-Themen 3
T Mehrere Dateien byteweise durch stream schieben Allgemeine Java-Themen 9
T Stream encodierrn und decodieren mit JSpeex Allgemeine Java-Themen 2
R Stream Byte für Byte durchgehen Allgemeine Java-Themen 5
O Input stream geht net Allgemeine Java-Themen 2
N Speichern von binären Dateien (Zip-Archiv) per Stream? Allgemeine Java-Themen 6
T Bit-Stream Allgemeine Java-Themen 12
R Stream für alle Dateiarten Allgemeine Java-Themen 9
thE_29 API für transport stream Allgemeine Java-Themen 2
M Output Stream / Protokoll does not support output Allgemeine Java-Themen 2
D GetResourceAsStream - Stream closed exception Allgemeine Java-Themen 5
G Umwandlung in Stream Allgemeine Java-Themen 5
J Output Stream Allgemeine Java-Themen 4
C Bei Javainstallation Cache ausschalten Allgemeine Java-Themen 13
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
F Eclipse cache vorhanden? Allgemeine Java-Themen 5
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
M Webstart-Fehler Cache Allgemeine Java-Themen 3
S Java Servlet Cache + Cache-Management Allgemeine Java-Themen 14
O Cache-Simulator Allgemeine Java-Themen 5
F ClassLoader und "Cache" Allgemeine Java-Themen 2
L Tomcat cache Allgemeine Java-Themen 10
T Jar-Files und JVM-Cache? Allgemeine Java-Themen 2
I getImage() - Cache abschalten Allgemeine Java-Themen 2
L Internet Cache löschen Allgemeine Java-Themen 3
M Cache & Datein kopieren Allgemeine Java-Themen 3
R Zugriff auf Internet Explorer Cache Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben