Klasse AbstractIndex<E extends Enum<E>>

java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.management.AbstractIndex<E>
Typparameter:
E - Enum, das die möglichen Spalten im Index definiert, z. B. IndexValues
Alle implementierten Schnittstellen:
BaseIndex<E>, AutoCloseable
Bekannte direkte Unterklassen:
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.
  • Konstruktordetails

    • AbstractIndex

      public AbstractIndex(IndexContentDescriptor<E> indexContentDescriptor, int bufferSize, @Nullable Path file) throws CorruptIndexException
      Erstellt eine neue Index-Instanz
      Parameter:
      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.
      Löst aus:
      CorruptIndexException - Index konnte nciht geladen werden
  • Methodendetails

    • 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.
      Angegeben von:
      query in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      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.
      Gibt zurück:
      Ein IndexResult, der die Ergebnistabelle enthält
      Löst aus:
      IndexException - Lesefehler oder korrupter Index
    • query

      public IndexResult<E> query() throws IndexException
      Ermittelt alle Index-Zeilen
      Angegeben von:
      query in Schnittstelle BaseIndex<E extends Enum<E>>
      Gibt zurück:
      Ein IndexResult, der die Ergebnistabelle enthält
      Löst aus:
      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.
      Angegeben von:
      setInsertValue in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      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.
      Angegeben von:
      setInsertValue in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      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)
      Angegeben von:
      first in Schnittstelle BaseIndex<E extends Enum<E>>
      Gibt zurück:
      IndexResult mit einem oder 0 Einträgen (falls der Index leer ist)
      Löst aus:
      IndexException - Lesefehler
    • insert

      public void insert() throws IndexException
      Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein.
      Angegeben von:
      insert in Schnittstelle BaseIndex<E extends Enum<E>>
      Löst aus:
      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.
      Angegeben von:
      insertOrReplace in Schnittstelle BaseIndex<E extends Enum<E>>
      Löst aus:
      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.
      Angegeben von:
      insert in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      onlyCheck - falls true wird nur geprüft, ob die neuen Werte eingefügt werden können, ohne dass die Monotoniebedingungen verletzt werden würden.
      Löst aus:
      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.
      Angegeben von:
      insertOrReplace in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      onlyCheck - falls true wird nur geprüft, ob die neuen Werte eingefügt werden können, ohne dass die Monotoniebedingungen verletzt werden würden.
      Löst aus:
      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.
      Angegeben von:
      append in Schnittstelle BaseIndex<E extends Enum<E>>
      Löst aus:
      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.
      Angegeben von:
      append in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      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.
      Löst aus:
      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
      Angegeben von:
      getLast in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      column - Spalte
      Gibt zurück:
      Wert
      Löst aus:
      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
      Angegeben von:
      getFirst in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      column - Spalte
      Gibt zurück:
      Wert
      Löst aus:
      IndexException - Lesefehler oder es gibt keinen aktuellen Eintrag
    • getStorage

      public HybridStorage getStorage()
      Zugriff auf die Low-Level-Speicherungsschicht
      Gibt zurück:
      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.
      Angegeben von:
      close in Schnittstelle AutoCloseable
      Angegeben von:
      close in Schnittstelle BaseIndex<E extends Enum<E>>
      Löst aus:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • flush

      public void flush() throws IndexException
      Beschreibung aus Schnittstelle kopiert: BaseIndex
      Schreibt den Index auf die Festplatte
      Angegeben von:
      flush in Schnittstelle BaseIndex<E extends Enum<E>>
      Löst aus:
      IndexException - Lese-/Schreibfehler der Indexe (z. B. korrupt)
    • numEntries

      public long numEntries()
      Anzahl der Einträge, die dieser Index speichert
      Angegeben von:
      numEntries in Schnittstelle BaseIndex<E extends Enum<E>>
      Gibt zurück:
      Anzahl der Einträge
    • toString

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

      public Path getFile()
      Gibt die Datei zurück
      Angegeben von:
      getFile in Schnittstelle BaseIndex<E extends Enum<E>>
      Gibt zurück:
      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).
      Angegeben von:
      removeAll in Schnittstelle BaseIndex<E extends Enum<E>>
      Parameter:
      query - Anfrage (siehe query(Map))
      Löst aus:
      IndexException - Lese-/Schreibfehler der Indexe (z. B. korrupt)