Class ArchiveTimeIndexImpl
- All Implemented Interfaces:
ArchiveTimeIndex
,BaseIndex<IndexValues>
,java.lang.AutoCloseable
- Direct Known Subclasses:
DataIndexAndArchiveTimeIndex
public class ArchiveTimeIndexImpl extends AbstractIndex<IndexValues> implements ArchiveTimeIndex
Zudem muss in jedem Eintrag das Maximum Größer oder gleich dem Minimum sein.
Wenn die Zahl der Einträge die Pufferkapazität im Speicher übersteigt, werden die Einträge in die Indexdatei geschrieben. Je größer die Pufferkapazität im Speicher, umso schneller ist die Suche, weil keine Plattenzugriffe notwendig sind. Die Suche nach ContainerIDs ist als Binärsuche implementiert, die automatisch im Speicher und in der Datei sucht.
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ArchiveTimeIndexImpl.Key
Deprecated. -
Field Summary
Fields Modifier and Type Field Description static java.lang.String
IDX_FILENAME
Der Dateiname, unter dem alle Indices dieser Art gespeichert werdenstatic int
NO_VALUE
Flag, mit dem signalisiert wird, dass ein Eintrag "keinen Wert" hat -
Constructor Summary
Constructors Constructor Description ArchiveTimeIndexImpl(int bufferSize, java.nio.file.Path file)
Erzeugt einen neuen monoton steigenden Index.ArchiveTimeIndexImpl(int bufferSize, java.nio.file.Path file, IndexContentDescriptor<IndexValues> contentDescriptor)
Erzeugt einen neuen monoton steigenden Index. -
Method Summary
Modifier and Type Method Description void
add(long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID)
Fügt einen neuen Eintrag in den Buffer ein.protected void
checkAdd(long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID)
static int
entrySize()
Gibt die anzahl Bytes zurück, die ein Indexeintrag belegt.long
getAbsoluteATMin()
Liefert den kleinsten Archivzeit-Minwert, der jemals in diesem Index gespeichert wird.protected IndexResult<IndexValues>
getContainerID(IndexValues minColumn, IndexValues maxColumn, long minKey, long maxKey)
Liefert die IDs der Container, bei denen der gesuchte Key zwischen Anfang und Ende liegt.IndexResult<IndexValues>
getContainerIDByArchiveTime(long minATime, long maxATime)
Liefert die IDs der Container, deren Archivzeitspanne sich mit der angegebenen Spanne überschneidet.Methods inherited from class de.bsvrz.ars.ars.persistence.index.backend.management.AbstractIndex
append, append, close, first, flush, getFile, getFirst, getLast, getLocation, getStorage, insert, insert, insertOrReplace, insertOrReplace, memoryCapacity, memoryEntries, numEntries, query, query, removeAll, setInsertValue, setInsertValue, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface de.bsvrz.ars.ars.persistence.index.backend.management.BaseIndex
append, append, close, first, flush, getFirst, getLast, getLocation, insert, insert, insertOrReplace, insertOrReplace, numEntries, query, query, removeAll, setInsertValue, setInsertValue
-
Field Details
-
IDX_FILENAME
public static final java.lang.String IDX_FILENAMEDer Dateiname, unter dem alle Indices dieser Art gespeichert werden- See Also:
- Constant Field Values
-
NO_VALUE
public static final int NO_VALUEFlag, mit dem signalisiert wird, dass ein Eintrag "keinen Wert" hat- See Also:
- Constant Field Values
-
-
Constructor Details
-
ArchiveTimeIndexImpl
Erzeugt einen neuen monoton steigenden Index.Bei startmode==APPEND_REUSE_LAST wird der Ringpuffer mit den aktuellsten Daten aus einer vorhandenen Indexdatei gefüllt. Zusätzlich wird der letzte Eintrag in der Indexdatei zum currentEntry. Damit kann ein Container fortgesetzt und der reaktivierte Eintrag weiter aktualisiert werden.
Bei startmode==CREATE_NEW wird ein leerer Index erzeugt und die bisherige Indexdatei (sofern vorhanden) geloescht.
- Parameters:
bufferSize
- Anzahl der Einträge, die der die der Index im RAM halten sollfile
- Datei- Throws:
CorruptIndexException
- Lesefehler der Indexe (z. B. korrupt)
-
ArchiveTimeIndexImpl
public ArchiveTimeIndexImpl(int bufferSize, java.nio.file.Path file, IndexContentDescriptor<IndexValues> contentDescriptor) throws CorruptIndexExceptionErzeugt einen neuen monoton steigenden Index.Bei startmode==APPEND_REUSE_LAST wird der Ringpuffer mit den aktuellsten Daten aus einer vorhandenen Indexdatei gefüllt. Zusätzlich wird der letzte Eintrag in der Indexdatei zum currentEntry. Damit kann ein Container fortgesetzt und der reaktivierte Eintrag weiter aktualisiert werden.
Bei startmode==CREATE_NEW wird ein leerer Index erzeugt und die bisherige Indexdatei (sofern vorhanden) geloescht.
- Parameters:
bufferSize
- Anzahl der Einträge, die der die der Index im RAM halten sollfile
- DateicontentDescriptor
- Beschreibung der Spalten (wegen Subklasse)- Throws:
CorruptIndexException
- Lesefehler der Indexe (z. B. korrupt)
-
-
Method Details
-
add
public void add(long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID) throws IndexExceptionFügt einen neuen Eintrag in den Buffer ein. Bei Bedarf wird der Puffer auf Platte geschrieben.- Parameters:
dIMin
- Min-Wert des DatenindexdIMax
- Max-Wert des DatenindexaTMin
- Min-Wert der ArchivzeitaTMax
- Max-Wert der ArchivzeitdTMin
- Min-Wert der DatenzeitdTMax
- Max-Wert der DatenzeitcID
- Container-ID des Neueintrags- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
checkAdd
protected void checkAdd(long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID) throws IndexException- Throws:
IndexException
-
getContainerID
protected IndexResult<IndexValues> getContainerID(IndexValues minColumn, IndexValues maxColumn, long minKey, long maxKey) throws IndexExceptionLiefert die IDs der Container, bei denen der gesuchte Key zwischen Anfang und Ende liegt.- Returns:
- Liste von ContainerIDs mit Min/Max-Werten von DI, AT, DT
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
getContainerIDByArchiveTime
public IndexResult<IndexValues> getContainerIDByArchiveTime(long minATime, long maxATime) throws IndexExceptionLiefert die IDs der Container, deren Archivzeitspanne sich mit der angegebenen Spanne überschneidet.- Specified by:
getContainerIDByArchiveTime
in interfaceArchiveTimeIndex
- Parameters:
minATime
- Beginn der ZeitspannemaxATime
- Ende der Zeitspanne- Returns:
- Liste von ContainerIDs mit Min/Max-Werten von DI, AT, DT
- Throws:
IndexException
- Lesefehler der Indexe (z. B. korrupt)
-
getAbsoluteATMin
Liefert den kleinsten Archivzeit-Minwert, der jemals in diesem Index gespeichert wird.- Returns:
- Kleinster Archivzeitwert
- Throws:
IndexException
- Bei Zugriffsproblemen mit der IndexDatei
-
entrySize
public static int entrySize()Gibt die anzahl Bytes zurück, die ein Indexeintrag belegt.- Returns:
- Anzahl bytes
-