Class HybridStorage
java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.storage.HybridStorage
- All Implemented Interfaces:
IndexStorage,java.lang.AutoCloseable
public final class HybridStorage extends java.lang.Object implements IndexStorage, java.lang.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
Constructors Constructor Description HybridStorage(int entryByteSize, int memoryLimit, java.nio.file.Path file)Erzeugt eine neue Instanz -
Method Summary
Modifier and Type Method Description voidclose()voiddeleteEntryAtIndex(long entryIndex)Löscht den Eintrag am Index entryIndexintentryByteSize()Gibt die Byte-Größe eines Eintrags zurücklongfirstMemoryIndex()Gibt den Index des ersten Eintrags im Speicher zurück, bzw. die Anzahl der in der datei gespeicherten Einträgevoidflush()voidgetEntries(long entryIndex, int numEntries, byte[] result, int destPos)Gibt Einträge aus dem Index zurückjava.nio.file.PathgetFile()Gibt die Datei zurückvoidinsertEntries(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.intmemoryCapacity()Gibt die maximale Anzahl der im Speicher gepufferten Einträge zurückintmemoryEntries()Gibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurücklongnumEntries()Gibt die Anzahl Einträge zurückvoidsetEntries(long entryIndex, int numEntries, byte[] data, int fromPos)Setzt Einträge im Indexjava.lang.StringtoString()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface de.bsvrz.ars.ars.persistence.index.backend.storage.IndexStorage
addLast, addLast, getAll, getEntries, getFirst, getLast, insertEntries, setEntries, setLast
-
Constructor Details
-
HybridStorage
public HybridStorage(int entryByteSize, int memoryLimit, @Nullable java.nio.file.Path file) throws java.io.IOExceptionErzeugt 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:
java.io.IOException
-
-
Method Details
-
getEntries
public void getEntries(long entryIndex, int numEntries, byte[] result, int destPos) throws java.io.IOExceptionDescription copied from interface:IndexStorageGibt Einträge aus dem Index zurück- Specified by:
getEntriesin 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:
java.io.IOException- IO-Fehler (z. B. bei Dateizugriff)
-
setEntries
public void setEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws java.io.IOExceptionDescription copied from interface:IndexStorageSetzt Einträge im Index- Specified by:
setEntriesin 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:
java.io.IOException- IO-Fehler (z. B. bei Dateizugriff)
-
insertEntries
public void insertEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws java.io.IOExceptionDescription copied from interface:IndexStorageFü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:
insertEntriesin 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:
java.io.IOException- IO-Fehler (z. B. bei Dateizugriff)
-
getFile
public java.nio.file.Path getFile()Gibt die Datei zurück- Returns:
- die Datei
-
numEntries
public long numEntries()Description copied from interface:IndexStorageGibt die Anzahl Einträge zurück- Specified by:
numEntriesin 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
-
memoryCapacity
public int memoryCapacity()Gibt die maximale Anzahl der im Speicher gepufferten Einträge zurück- Returns:
- maximale Anzahl Einträge
-
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:IndexStorageGibt die Byte-Größe eines Eintrags zurück- Specified by:
entryByteSizein interfaceIndexStorage- Returns:
- die Byte-Größe eines Eintrags
-
toString
public java.lang.String toString()- Overrides:
toStringin classjava.lang.Object
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Throws:
java.io.IOException
-
deleteEntryAtIndex
public void deleteEntryAtIndex(long entryIndex) throws java.io.IOExceptionDescription copied from interface:IndexStorageLöscht den Eintrag am Index entryIndex- Specified by:
deleteEntryAtIndexin interfaceIndexStorage- Parameters:
entryIndex- Index, der gelöscht werden soll- Throws:
java.io.IOException
-
flush
public void flush() throws java.io.IOException- Specified by:
flushin interfaceIndexStorage- Throws:
java.io.IOException
-