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 TypeMethodDescriptionvoidclose()voiddeleteEntryAtIndex(long entryIndex) Löscht den Eintrag am Index entryIndexintGibt die Byte-Größe eines Eintrags zurücklongGibt den Index des ersten Eintrags im Speicher zurück, bzw. die Anzahl der in der datei gespeicherten Einträgevoidflush()Schreibt alle Änderungen in das DateisystemvoidgetEntries(long entryIndex, int numEntries, byte[] result, int destPos) Gibt Einträge aus dem Index zurückgetFile()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.intGibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurücklongGibt die Anzahl Einträge zurückvoidsetEntries(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, waitMethods 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: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:
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: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:
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: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:
IOException- IO-Fehler (z. B. bei Dateizugriff)
-
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
-
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
-
close
- Specified by:
closein interfaceAutoCloseable- Throws:
IOException
-
deleteEntryAtIndex
Description copied from interface:IndexStorageLöscht den Eintrag am Index entryIndex- Specified by:
deleteEntryAtIndexin interfaceIndexStorage- Parameters:
entryIndex- Index, der gelöscht werden soll- Throws:
IOException
-
flush
Schreibt alle Änderungen in das Dateisystem- Throws:
IOException- Fehler beim Schreiben
-