Class HybridStorage
java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.storage.HybridStorage
- All Implemented Interfaces:
IndexStorage
,AutoCloseable
Eine
IndexStorage
-Implementierung, die einen Puffer für neu angelegte Objekte im Speicher hält und gleichzeitig auf eine Datei verweist.
Läuft der RAM-Puffer über, werden die Einträge an die Datei angehängt.
Beim Lesen wird die Datei und der RAM-Puffer wie ein zusammenhängender Speicherbereich angesprochen.
-
Constructor Summary
ConstructorsConstructorDescriptionHybridStorage
(int entryByteSize, int memoryLimit, Path file) Erzeugt eine neue Instanz -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
void
deleteEntryAtIndex
(long entryIndex) Löscht den Eintrag am Index entryIndexint
Gibt die Byte-Größe eines Eintrags zurücklong
Gibt den Index des ersten Eintrags im Speicher zurück, bzw. die Anzahl der in der datei gespeicherten Einträgevoid
flush()
Schreibt alle Änderungen in das Dateisystemvoid
getEntries
(long entryIndex, int numEntries, byte[] result, int destPos) Gibt Einträge aus dem Index zurückgetFile()
Gibt die Datei zurückvoid
insertEntries
(long entryIndex, int numEntries, byte[] data, int fromPos) Fügt Einträge im Index ein, anders als beiIndexStorage.setEntries(long, int, byte[])
werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.int
Gibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurücklong
Gibt die Anzahl Einträge zurückvoid
setEntries
(long entryIndex, int numEntries, byte[] data, int fromPos) Setzt Einträge im IndextoString()
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface de.bsvrz.ars.ars.persistence.index.backend.storage.IndexStorage
addLast, addLast, getAll, getEntries, getFirst, getLast, insertEntries, setEntries
-
Constructor Details
-
HybridStorage
Erzeugt eine neue Instanz- Parameters:
entryByteSize
- Byte-Größe eines EintragsmemoryLimit
- Maximale Anzahl Einträge, die im Speicher gehalten werdenfile
- Datei, in die die Einträge geschrieben werden sollen (in der Regel != null, außer für bestimmte Tests)- Throws:
IOException
- IO-Fehler beim Lesen
-
-
Method Details
-
getEntries
public void getEntries(long entryIndex, int numEntries, byte[] result, int destPos) throws IOException Description copied from interface:IndexStorage
Gibt Einträge aus dem Index zurück- Specified by:
getEntries
in interfaceIndexStorage
- Parameters:
entryIndex
- Nullbasierte Position des ersten Eintrags, der angefragt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-OffsetnumEntries
- Anzahl Einträge, die angefragt werden sollenresult
- Byte-Array, in das das Ergebnis kopiert werden soll, muss mindestens destPos + (numEntries *IndexStorage.entryByteSize()
) Bytes groß sein.destPos
- Ziel-Position im Byte-Array. Standardmäßig 0.- Throws:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
setEntries
public void setEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws IOException Description copied from interface:IndexStorage
Setzt Einträge im Index- Specified by:
setEntries
in interfaceIndexStorage
- Parameters:
entryIndex
- Nullbasierte Position des ersten Eintrags, der gesetzt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-OffsetnumEntries
- Anzahl Einträge, die überschrieben werden sollendata
- Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens fromPos + (numEntries *IndexStorage.entryByteSize()
) Bytes groß sein.fromPos
- Von-Position im Byte-Array. Standardmäßig 0.- Throws:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
insertEntries
public void insertEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws IOException Description copied from interface:IndexStorage
Fügt Einträge im Index ein, anders als beiIndexStorage.setEntries(long, int, byte[])
werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.- Specified by:
insertEntries
in interfaceIndexStorage
- Parameters:
entryIndex
- Nullbasierte Position an der Eingefügt werden soll (neuer Index des ersten eingefügten Eintrags). Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-OffsetnumEntries
- Anzahl Einträge, die eingefügt werden sollendata
- Byte-Array, aus dem die Daten kopiert werden sollen, muss mindestens (numEntries *IndexStorage.entryByteSize()
) Bytes groß sein.fromPos
- Von-Position im Byte-Array. Standardmäßig 0.- Throws:
IOException
- IO-Fehler (z. B. bei Dateizugriff)
-
getFile
Gibt die Datei zurück- Returns:
- die Datei
-
numEntries
public long numEntries()Description copied from interface:IndexStorage
Gibt die Anzahl Einträge zurück- Specified by:
numEntries
in interfaceIndexStorage
- Returns:
- die Anzahl Einträge
-
firstMemoryIndex
public long firstMemoryIndex()Gibt den Index des ersten Eintrags im Speicher zurück, bzw. die Anzahl der in der datei gespeicherten Einträge- Returns:
- den Index des ersten Eintrags im Speicher
-
memoryEntries
public int memoryEntries()Gibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurück- Returns:
- aktuelle Anzahl Einträge
-
entryByteSize
public int entryByteSize()Description copied from interface:IndexStorage
Gibt die Byte-Größe eines Eintrags zurück- Specified by:
entryByteSize
in interfaceIndexStorage
- Returns:
- die Byte-Größe eines Eintrags
-
toString
-
close
- Specified by:
close
in interfaceAutoCloseable
- Throws:
IOException
-
deleteEntryAtIndex
Description copied from interface:IndexStorage
Löscht den Eintrag am Index entryIndex- Specified by:
deleteEntryAtIndex
in interfaceIndexStorage
- Parameters:
entryIndex
- Index, der gelöscht werden soll- Throws:
IOException
-
flush
Schreibt alle Änderungen in das Dateisystem- Throws:
IOException
- Fehler beim Schreiben
-