java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.storage.HybridStorage
Alle implementierten Schnittstellen:
IndexStorage, AutoCloseable

public final class HybridStorage extends Object implements 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.

  • Konstruktordetails

    • HybridStorage

      public HybridStorage(int entryByteSize, int memoryLimit, @Nullable Path file) throws IOException
      Erzeugt eine neue Instanz
      Parameter:
      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)
      Löst aus:
      IOException - IO-Fehler beim Lesen
  • Methodendetails

    • getEntries

      public void getEntries(long entryIndex, int numEntries, byte[] result, int destPos) throws IOException
      Beschreibung aus Schnittstelle kopiert: IndexStorage
      Gibt Einträge aus dem Index zurück
      Angegeben von:
      getEntries in Schnittstelle IndexStorage
      Parameter:
      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.
      Löst aus:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • setEntries

      public void setEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws IOException
      Beschreibung aus Schnittstelle kopiert: IndexStorage
      Setzt Einträge im Index
      Angegeben von:
      setEntries in Schnittstelle IndexStorage
      Parameter:
      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.
      Löst aus:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • insertEntries

      public void insertEntries(long entryIndex, int numEntries, byte[] data, int fromPos) throws IOException
      Beschreibung aus Schnittstelle kopiert: 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.
      Angegeben von:
      insertEntries in Schnittstelle IndexStorage
      Parameter:
      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.
      Löst aus:
      IOException - IO-Fehler (z. B. bei Dateizugriff)
    • getFile

      public Path getFile()
      Gibt die Datei zurück
      Gibt zurück:
      die Datei
    • numEntries

      public long numEntries()
      Beschreibung aus Schnittstelle kopiert: IndexStorage
      Gibt die Anzahl Einträge zurück
      Angegeben von:
      numEntries in Schnittstelle IndexStorage
      Gibt zurück:
      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
      Gibt zurück:
      den Index des ersten Eintrags im Speicher
    • memoryEntries

      public int memoryEntries()
      Gibt die aktuelle Anzahl der im Speicher gepufferten Einträge zurück
      Gibt zurück:
      aktuelle Anzahl Einträge
    • entryByteSize

      public int entryByteSize()
      Beschreibung aus Schnittstelle kopiert: IndexStorage
      Gibt die Byte-Größe eines Eintrags zurück
      Angegeben von:
      entryByteSize in Schnittstelle IndexStorage
      Gibt zurück:
      die Byte-Größe eines Eintrags
    • toString

      public String toString()
      Setzt außer Kraft:
      toString in Klasse Object
    • close

      public void close() throws IOException
      Angegeben von:
      close in Schnittstelle AutoCloseable
      Löst aus:
      IOException
    • deleteEntryAtIndex

      public void deleteEntryAtIndex(long entryIndex) throws IOException
      Beschreibung aus Schnittstelle kopiert: IndexStorage
      Löscht den Eintrag am Index entryIndex
      Angegeben von:
      deleteEntryAtIndex in Schnittstelle IndexStorage
      Parameter:
      entryIndex - Index, der gelöscht werden soll
      Löst aus:
      IOException
    • flush

      public void flush() throws IOException
      Schreibt alle Änderungen in das Dateisystem
      Löst aus:
      IOException - Fehler beim Schreiben