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 voidappend()Fügt die vorher mitsetInsertValue(Enum, long)gesetzten Werte hinten an den Index an.voidappend(boolean onlyCheck)Fügt die vorher mitsetInsertValue(Enum, long)gesetzten Werte hinten an den Index an.voidclose()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)voidflush()java.nio.file.PathgetFile()Gibt die Datei zurücklonggetFirst(E column)Gibt den Wert in der ersten Zeile un der angegebenen Spalte zurücklonggetLast(E column)Gibt den Wert in der letzten Zeile un der angegebenen Spalte zurückIdContainerFileDirgetLocation()Speicherort des IndexesHybridStoragegetStorage()Zugriff auf die Low-Level-Speicherungsschichtvoidinsert()Fügt die vorher mitsetInsertValue(Enum, long)gesetzten Werte in den Index ein.voidinsert(boolean onlyCheck)Fügt die vorher mitsetInsertValue(Enum, long)gesetzten Werte in den Index ein oder prüft, ob das funktionieren würde.voidinsertOrReplace()Fügt die vorher mitsetInsertValue(Enum, long)gesetzten Werte in den Index ein oder überschreibt den bisher gespeicherten Wert mit dem gleichenPrimärschlüssel.voidinsertOrReplace(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.intmemoryCapacity()Anzahl der Einträge, die dieser Index im RAM halten kannintmemoryEntries()Anzahl der Einträge, die dieser Index im RAM hältlongnumEntries()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.voidremoveAll(java.util.Map<E,LongRange> query)Löscht alle Einträge, diequery(Map)mit dem entsprechenden Parameter zurückliefern würde.voidsetInsertValue(E column, long value)Setzt einen Wert der Einfügezeile, die später mitinsert()eingefügt werden kann.voidsetInsertValue(E column, java.lang.String value)Setzt einen Wert der Einfügezeile, die später mitinsert()eingefügt werden kann.java.lang.StringtoString()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- DerIndexContentDescriptorgibt 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:
queryin 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:
queryin 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:
setInsertValuein 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:
setInsertValuein 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:
firstin 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:
insertin 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:
insertOrReplacein 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:
insertin 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:
insertOrReplacein 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:
appendin 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:
appendin 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:
getLastin 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:
getFirstin 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:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfaceBaseIndex<E extends java.lang.Enum<E>>- Throws:
IndexException- Lesefehler der Indexe (z. B. korrupt)
-
flush
- Specified by:
flushin 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:
numEntriesin interfaceBaseIndex<E extends java.lang.Enum<E>>- Returns:
- Anzahl der Einträge
-
toString
public java.lang.String toString()- Overrides:
toStringin 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:BaseIndexSpeicherort des Indexes- Specified by:
getLocationin 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:
removeAllin interfaceBaseIndex<E extends java.lang.Enum<E>>- Parameters:
query- Anfrage (siehequery(Map))- Throws:
IndexException
-