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 mitsetInsertValue(Enum, long)
gesetzten Werte hinten an den Index an.void
append(boolean onlyCheck)
Fügt die vorher mitsetInsertValue(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ücklong
getFirst(E column)
Gibt den Wert in der ersten Zeile un der angegebenen Spalte zurücklong
getLast(E column)
Gibt den Wert in der letzten Zeile un der angegebenen Spalte zurückIdContainerFileDir
getLocation()
Speicherort des IndexesHybridStorage
getStorage()
Zugriff auf die Low-Level-Speicherungsschichtvoid
insert()
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein.void
insert(boolean onlyCheck)
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein oder prüft, ob das funktionieren würde.void
insertOrReplace()
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichenPrimärschlüssel
.void
insertOrReplace(boolean onlyCheck)
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichenPrimärschlüssel
.int
memoryCapacity()
Anzahl der Einträge, die dieser Index im RAM halten kannint
memoryEntries()
Anzahl der Einträge, die dieser Index im RAM hältlong
numEntries()
Anzahl der Einträge, die dieser Index speichertIndexResult<E>
query()
Ermittelt alle Index-ZeilenIndexResult<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, diequery(Map)
mit dem entsprechenden Parameter zurückliefern würde.void
setInsertValue(E column, long value)
Setzt einen Wert der Einfügezeile, die später mitinsert()
eingefügt werden kann.void
setInsertValue(E column, java.lang.String value)
Setzt einen Wert der Einfügezeile, die später mitinsert()
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 CorruptIndexExceptionErstellt eine neue Index-Instanz- Parameters:
indexContentDescriptor
- DerIndexContentDescriptor
gibt an, welche Spalten/informationen der Index enthalten kannbufferSize
- 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
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 interfaceBaseIndex<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
Ermittelt alle Index-Zeilen- Specified by:
query
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Returns:
- Ein IndexResult, der die Ergebnistabelle enthält
- Throws:
IndexException
- Lesefehler oder korrupter Index
-
setInsertValue
Setzt einen Wert der Einfügezeile, die später mitinsert()
eingefügt werden kann.- Specified by:
setInsertValue
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Parameters:
column
- Spaltevalue
- Wert
-
setInsertValue
Setzt einen Wert der Einfügezeile, die später mitinsert()
eingefügt werden kann.- Specified by:
setInsertValue
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Parameters:
column
- Spaltevalue
- Wert
-
first
Gibt den ersten (der Sortierung nach am kleinsten) Eintrag zurück (der am Dateianfang gespeichert ist)- Specified by:
first
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Returns:
- IndexResult mit einem oder 0 Einträgen (falls der Index leer ist)
- Throws:
IndexException
- Lesefehler
-
insert
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein.- Specified by:
insert
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
insertOrReplace
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichenPrimärschlüssel
.- Specified by:
insertOrReplace
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
insert
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein oder prüft, ob das funktionieren würde.- Specified by:
insert
in interfaceBaseIndex<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
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichenPrimärschlüssel
. Oder prüft, ob das funktionieren würde.- Specified by:
insertOrReplace
in interfaceBaseIndex<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
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte hinten an den Index an.- Specified by:
append
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
append
Fügt die vorher mitsetInsertValue(Enum, long)
gesetzten Werte hinten an den Index an.- Specified by:
append
in interfaceBaseIndex<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
Gibt den Wert in der letzten Zeile un der angegebenen Spalte zurück- Specified by:
getLast
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Parameters:
column
- Spalte- Returns:
- Wert
- Throws:
IndexException
- Lesefehler oder es gibt keinen aktuellen Eintrag
-
getFirst
Gibt den Wert in der ersten Zeile un der angegebenen Spalte zurück- Specified by:
getFirst
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Parameters:
column
- Spalte- Returns:
- Wert
- Throws:
IndexException
- Lesefehler oder es gibt keinen aktuellen Eintrag
-
getStorage
Zugriff auf die Low-Level-Speicherungsschicht- Returns:
- Siehe
IndexStorage
-
close
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 interfacejava.lang.AutoCloseable
- Specified by:
close
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
flush
- Specified by:
flush
in interfaceBaseIndex<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 interfaceBaseIndex<E extends java.lang.Enum<E>>
- Returns:
- Anzahl der Einträge
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
-
getFile
public java.nio.file.Path getFile()Gibt die Datei zurück- Returns:
- die Datei, in der der Index gespeichert wird.
-
getLocation
Description copied from interface:BaseIndex
Speicherort des Indexes- Specified by:
getLocation
in interfaceBaseIndex<E extends java.lang.Enum<E>>
- Returns:
- Speicherort
- Throws:
IndexException
-
removeAll
Löscht alle Einträge, diequery(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 interfaceBaseIndex<E extends java.lang.Enum<E>>
- Parameters:
query
- Anfrage (siehequery(Map)
)- Throws:
IndexException
-