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 entryIndex
    int entryByteSize()
    Gibt die Byte-Größe eines Eintrags zurück
    long firstMemoryIndex()
    Gibt den Index des ersten Eintrags im Speicher zurück, bzw. die Anzahl der in der datei gespeicherten Einträge
    void flush()  
    void getEntries​(long entryIndex, int numEntries, byte[] result, int destPos)
    Gibt Einträge aus dem Index zurück
    java.nio.file.Path getFile()
    Gibt die Datei zurück
    void insertEntries​(long entryIndex, int numEntries, byte[] data, int fromPos)
    Fügt Einträge im Index ein, anders als bei IndexStorage.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ück
    int memoryEntries()
    Gibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurück
    long numEntries()
    Gibt die Anzahl Einträge zurück
    void setEntries​(long entryIndex, int numEntries, byte[] data, int fromPos)
    Setzt Einträge im Index
    java.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.IOException
      Erzeugt eine neue Instanz
      Parameters:
      entryByteSize - Byte-Größe eines Eintrags
      memoryLimit - Maximale Anzahl Einträge, die im Speicher gehalten werden
      file - 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.IOException
      Description copied from interface: IndexStorage
      Gibt Einträge aus dem Index zurück
      Specified by:
      getEntries in interface IndexStorage
      Parameters:
      entryIndex - Nullbasierte Position des ersten Eintrags, der angefragt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die angefragt werden sollen
      result - 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.IOException
      Description copied from interface: IndexStorage
      Setzt Einträge im Index
      Specified by:
      setEntries in interface IndexStorage
      Parameters:
      entryIndex - Nullbasierte Position des ersten Eintrags, der gesetzt werden soll. Gemeint ist hier die "Zeilennummer" im Index, nicht der byte-Offset
      numEntries - Anzahl Einträge, die überschrieben werden sollen
      data - 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.IOException
      Description copied from interface: IndexStorage
      Fügt Einträge im Index ein, anders als bei IndexStorage.setEntries(long, int, byte[]) werden die dort bestehenden Daten aber nicht überschrieben, sondern nach hinten geschoben.
      Specified by:
      insertEntries in interface IndexStorage
      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-Offset
      numEntries - Anzahl Einträge, die eingefügt werden sollen
      data - 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 interface IndexStorage
      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 interface IndexStorage
      Returns:
      die Byte-Größe eines Eintrags
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object
    • close

      public void close() throws java.io.IOException
      Specified by:
      close in interface java.lang.AutoCloseable
      Throws:
      java.io.IOException
    • deleteEntryAtIndex

      public void deleteEntryAtIndex​(long entryIndex) throws java.io.IOException
      Description copied from interface: IndexStorage
      Löscht den Eintrag am Index entryIndex
      Specified by:
      deleteEntryAtIndex in interface IndexStorage
      Parameters:
      entryIndex - Index, der gelöscht werden soll
      Throws:
      java.io.IOException
    • flush

      public void flush() throws java.io.IOException
      Specified by:
      flush in interface IndexStorage
      Throws:
      java.io.IOException