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 void
close()
void
deleteEntryAtIndex(long entryIndex)
Löscht den Eintrag am Index entryIndexint
entryByteSize()
Gibt die Byte-Größe eines Eintrags zurücklong
firstMemoryIndex()
Gibt den Index des ersten Eintrags im Speicher zurück, bzw. die Anzahl der in der datei gespeicherten Einträgevoid
flush()
void
getEntries(long entryIndex, int numEntries, byte[] result, int destPos)
Gibt Einträge aus dem Index zurückjava.nio.file.Path
getFile()
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
memoryCapacity()
Gibt die maximale Anzahl der im Speicher gepufferten Einträge zurückint
memoryEntries()
Gibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurücklong
numEntries()
Gibt die Anzahl Einträge zurückvoid
setEntries(long entryIndex, int numEntries, byte[] data, int fromPos)
Setzt Einträge im Indexjava.lang.String
toString()
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, 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: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:
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: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:
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: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:
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: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
-
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:IndexStorage
Gibt die Byte-Größe eines Eintrags zurück- Specified by:
entryByteSize
in interfaceIndexStorage
- Returns:
- die Byte-Größe eines Eintrags
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-
close
public void close() throws java.io.IOException- Specified by:
close
in interfacejava.lang.AutoCloseable
- Throws:
java.io.IOException
-
deleteEntryAtIndex
public void deleteEntryAtIndex(long entryIndex) throws java.io.IOExceptionDescription 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:
java.io.IOException
-
flush
public void flush() throws java.io.IOException- Specified by:
flush
in interfaceIndexStorage
- Throws:
java.io.IOException
-