Class AbstractIndex<E extends Enum<E>>

java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.management.AbstractIndex<E>
Type Parameters:
E - Enum, das die möglichen Spalten im Index definiert, z. B. IndexValues
All Implemented Interfaces:
BaseIndex<E>, AutoCloseable
Direct Known Subclasses:
ArchiveTimeIndexImpl, ContainerManagementIndex, DataIndexIndexImpl, DataTimeIndexImpl

public class AbstractIndex<E extends Enum<E>> extends Object implements BaseIndex<E>
Basisimplementierung für Indexdateien im Archivsystem. Eine Indexdatei kann man sich vorstellen, wie eine Datenbank- oder Excel-Tabelle, die nach bestimmten Spalten sortiert abgelegt wird um effizient Anfragen durchführen zu können.
  • Constructor Details

    • AbstractIndex

      public AbstractIndex(IndexContentDescriptor<E> indexContentDescriptor, int bufferSize, @Nullable Path file) throws CorruptIndexException
      Erstellt eine neue Index-Instanz
      Parameters:
      indexContentDescriptor - Der IndexContentDescriptor gibt an, welche Spalten/informationen der Index enthalten kann
      bufferSize - Anzahl Index-Einträge, die aus der Indexdatei maximal gleichzeitig im Speicher gehalten werden (als Cache)
      file - Index-Datei, die zu öffnen bzw. anzulegen ist. Falls null, wird der Index nur temporär im Speicher gehalten.
      Throws:
      CorruptIndexException - Index konnte nciht geladen werden
  • Method Details

    • query

      public IndexResult<E> query(Map<E,LongRange> query) throws IndexException
      Ermittelt alle Index-Zeilen, die zu der angegebenen Anfrage passen. Das Ergebnis wird performant ermittelt, indem alle bekannten Einschränkungen ausgewertet werden. Wird nach Spalten eingeschränkt, die nicht im Index vorkommen, dann werden ggf. überflüssige Zeilen/Container usw. zurückgegeben. Hier muss dann der Anfrager entsprechend selbst filtern.
      Specified by:
      query in interface BaseIndex<E extends Enum<E>>
      Parameters:
      query - Anfrage. Zu jeder Spalte in dem Index kann ein von/bis-Bereich angegeben werden, zu dem Container geliefert werden sollen. Wie für Archivdaten üblich, wird als erster Container ggf. der Container zurückgegeben, der den letzten Datensatz vor dem Anfragezeitraum enthält.
      Returns:
      Ein IndexResult, der die Ergebnistabelle enthält
      Throws:
      IndexException - Lesefehler oder korrupter Index
    • query

      public IndexResult<E> query() throws IndexException
      Ermittelt alle Index-Zeilen
      Specified by:
      query in interface BaseIndex<E extends Enum<E>>
      Returns:
      Ein IndexResult, der die Ergebnistabelle enthält
      Throws:
      IndexException - Lesefehler oder korrupter Index
    • setInsertValue

      public final void setInsertValue(E column, long value)
      Setzt einen Wert der Einfügezeile, die später mit insert() eingefügt werden kann.
      Specified by:
      setInsertValue in interface BaseIndex<E extends Enum<E>>
      Parameters:
      column - Spalte
      value - Wert
    • setInsertValue

      public final void setInsertValue(E column, String value)
      Setzt einen Wert der Einfügezeile, die später mit insert() eingefügt werden kann.
      Specified by:
      setInsertValue in interface BaseIndex<E extends Enum<E>>
      Parameters:
      column - Spalte
      value - Wert
    • first

      public IndexResult<E> first() throws IndexException
      Gibt den ersten (der Sortierung nach am kleinsten) Eintrag zurück (der am Dateianfang gespeichert ist)
      Specified by:
      first in interface BaseIndex<E extends Enum<E>>
      Returns:
      IndexResult mit einem oder 0 Einträgen (falls der Index leer ist)
      Throws:
      IndexException - Lesefehler
    • insert

      public void insert() throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein.
      Specified by:
      insert in interface BaseIndex<E extends Enum<E>>
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • insertOrReplace

      public void insertOrReplace() throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichen Primärschlüssel.
      Specified by:
      insertOrReplace in interface BaseIndex<E extends Enum<E>>
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • insert

      public void insert(boolean onlyCheck) throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein oder prüft, ob das funktionieren würde.
      Specified by:
      insert in interface BaseIndex<E extends Enum<E>>
      Parameters:
      onlyCheck - falls true wird nur geprüft, ob die neuen Werte eingefügt werden können, ohne dass die Monotoniebedingungen verletzt werden würden.
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • insertOrReplace

      public void insertOrReplace(boolean onlyCheck) throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichen Primärschlüssel. Oder prüft, ob das funktionieren würde.
      Specified by:
      insertOrReplace in interface BaseIndex<E extends Enum<E>>
      Parameters:
      onlyCheck - falls true wird nur geprüft, ob die neuen Werte eingefügt werden können, ohne dass die Monotoniebedingungen verletzt werden würden.
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • append

      public void append() throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte hinten an den Index an.
      Specified by:
      append in interface BaseIndex<E extends Enum<E>>
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • append

      public void append(boolean onlyCheck) throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte hinten an den Index an.
      Specified by:
      append in interface BaseIndex<E extends Enum<E>>
      Parameters:
      onlyCheck - falls true wird nur geprüft, ob die neuen Werte eingefügt werden können, ohne dass die Monotoniebedingungen verletzt werden würden und der Index wird nicht verändert.
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • getLast

      public long getLast(E column) throws IndexException
      Gibt den Wert in der letzten Zeile un der angegebenen Spalte zurück
      Specified by:
      getLast in interface BaseIndex<E extends Enum<E>>
      Parameters:
      column - Spalte
      Returns:
      Wert
      Throws:
      IndexException - Lesefehler oder es gibt keinen aktuellen Eintrag
    • getFirst

      public long getFirst(E column) throws IndexException
      Gibt den Wert in der ersten Zeile un der angegebenen Spalte zurück
      Specified by:
      getFirst in interface BaseIndex<E extends Enum<E>>
      Parameters:
      column - Spalte
      Returns:
      Wert
      Throws:
      IndexException - Lesefehler oder es gibt keinen aktuellen Eintrag
    • getStorage

      public HybridStorage getStorage()
      Zugriff auf die Low-Level-Speicherungsschicht
      Returns:
      Siehe IndexStorage
    • close

      public void close() throws IndexException
      Schließt den Index und speichert alle geänderten Daten auf Platte. Nach dem Aufruf von close() darf die Index-Instanz nicht mehr verwendet werden.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface BaseIndex<E extends Enum<E>>
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • flush

      public void flush() throws IndexException
      Description copied from interface: BaseIndex
      Schreibt den Index auf die Festplatte
      Specified by:
      flush in interface BaseIndex<E extends Enum<E>>
      Throws:
      IndexException - Lese-/Schreibfehler der Indexe (z. B. korrupt)
    • numEntries

      public long numEntries()
      Anzahl der Einträge, die dieser Index speichert
      Specified by:
      numEntries in interface BaseIndex<E extends Enum<E>>
      Returns:
      Anzahl der Einträge
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • getFile

      public Path getFile()
      Gibt die Datei zurück
      Specified by:
      getFile in interface BaseIndex<E extends Enum<E>>
      Returns:
      die Datei, in der der Index gespeichert wird.
    • removeAll

      public void removeAll(Map<E,LongRange> query) throws IndexException
      Löscht alle Einträge, die query(Map) mit dem entsprechenden Parameter zurückliefern würde. (Ausnahme: Der letzte Container vor dem Anfragebereich, der ggf. als Startwert zurückgegeben würde, wird nicht gelöscht).
      Specified by:
      removeAll in interface BaseIndex<E extends Enum<E>>
      Parameters:
      query - Anfrage (siehe query(Map))
      Throws:
      IndexException - Lese-/Schreibfehler der Indexe (z. B. korrupt)