Class AbstractIndex<E extends java.lang.Enum<E>>

java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.management.AbstractIndex<E>
All Implemented Interfaces:
BaseIndex<E>, java.lang.AutoCloseable
Direct Known Subclasses:
ArchiveTimeIndexImpl, ContainerManagementIndex, DataIndexIndexImpl, DataTimeIndexImpl

public class AbstractIndex<E extends java.lang.Enum<E>>
extends java.lang.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 Summary

    Constructors
    Constructor Description
    AbstractIndex​(IndexContentDescriptor<E> indexContentDescriptor, int bufferSize, java.nio.file.Path file)
    Erstellt eine neue Index-Instanz
  • Method Summary

    Modifier and Type Method Description
    void append()
    Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte hinten an den Index an.
    void append​(boolean onlyCheck)
    Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte hinten an den Index an.
    void close()
    Schließt den Index und speichert alle geänderten Daten auf Platte.
    IndexResult<E> first()
    Gibt den ersten (der Sortierung nach am kleinsten) Eintrag zurück (der am Dateianfang gespeichert ist)
    void flush()  
    java.nio.file.Path getFile()
    Gibt die Datei zurück
    long getFirst​(E column)
    Gibt den Wert in der ersten Zeile un der angegebenen Spalte zurück
    long getLast​(E column)
    Gibt den Wert in der letzten Zeile un der angegebenen Spalte zurück
    IdContainerFileDir getLocation()
    Speicherort des Indexes
    HybridStorage getStorage()
    Zugriff auf die Low-Level-Speicherungsschicht
    void insert()
    Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein.
    void insert​(boolean onlyCheck)
    Fügt die vorher mit setInsertValue(Enum, long) gesetzten Werte in den Index ein oder prüft, ob das funktionieren würde.
    void insertOrReplace()
    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.
    void insertOrReplace​(boolean onlyCheck)
    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.
    int memoryCapacity()
    Anzahl der Einträge, die dieser Index im RAM halten kann
    int memoryEntries()
    Anzahl der Einträge, die dieser Index im RAM hält
    long numEntries()
    Anzahl der Einträge, die dieser Index speichert
    IndexResult<E> query()
    Ermittelt alle Index-Zeilen
    IndexResult<E> query​(java.util.Map<E,​LongRange> query)
    Ermittelt alle Index-Zeilen, die zu der angegebenen Anfrage passen.
    void removeAll​(java.util.Map<E,​LongRange> query)
    Löscht alle Einträge, die query(Map) mit dem entsprechenden Parameter zurückliefern würde.
    void setInsertValue​(E column, long value)
    Setzt einen Wert der Einfügezeile, die später mit insert() eingefügt werden kann.
    void setInsertValue​(E column, java.lang.String value)
    Setzt einen Wert der Einfügezeile, die später mit insert() eingefügt werden kann.
    java.lang.String toString()  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • AbstractIndex

      public AbstractIndex​(IndexContentDescriptor<E> indexContentDescriptor, int bufferSize, @Nullable java.nio.file.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​(java.util.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 java.lang.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 java.lang.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 java.lang.Enum<E>>
      Parameters:
      column - Spalte
      value - Wert
    • setInsertValue

      public final void setInsertValue​(E column, java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.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 java.lang.AutoCloseable
      Specified by:
      close in interface BaseIndex<E extends java.lang.Enum<E>>
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • flush

      public void flush() throws IndexException
      Specified by:
      flush in interface BaseIndex<E extends java.lang.Enum<E>>
      Throws:
      IndexException
    • memoryCapacity

      public int memoryCapacity()
      Anzahl der Einträge, die dieser Index im RAM halten kann
      Returns:
      Anzahl der Einträge
    • memoryEntries

      public int memoryEntries()
      Anzahl der Einträge, die dieser Index im RAM hält
      Returns:
      Anzahl der Einträge
    • numEntries

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

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

      public java.nio.file.Path getFile()
      Gibt die Datei zurück
      Returns:
      die Datei, in der der Index gespeichert wird.
    • getLocation

      public IdContainerFileDir getLocation() throws IndexException
      Description copied from interface: BaseIndex
      Speicherort des Indexes
      Specified by:
      getLocation in interface BaseIndex<E extends java.lang.Enum<E>>
      Returns:
      Speicherort
      Throws:
      IndexException
    • removeAll

      public void removeAll​(java.util.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 java.lang.Enum<E>>
      Parameters:
      query - Anfrage (siehe query(Map))
      Throws:
      IndexException