Class ArchiveTimeIndexImpl

java.lang.Object
de.bsvrz.ars.ars.persistence.index.backend.management.AbstractIndex<IndexValues>
de.bsvrz.ars.ars.persistence.index.ArchiveTimeIndexImpl
All Implemented Interfaces:
ArchiveTimeIndex, BaseIndex<IndexValues>, java.lang.AutoCloseable
Direct Known Subclasses:
DataIndexAndArchiveTimeIndex

public class ArchiveTimeIndexImpl
extends AbstractIndex<IndexValues>
implements ArchiveTimeIndex
Diese Klasse implementiert einen monoton steigenden Index. Jeder Eintrag des Index besteht aus Datenindex-Minimum, Datenindex-Maximum, Archivzeit-Minimum, Archivzeit-Maximum, Datenzeit-Minimum, Datenzeit-Maximum und der Container-ID. In dieser Klasse ist gefordert, dass die Archivzeit monoton und die ContainerID streng monoton über alle Eintraege hinweg steigend sind. Datenindex und Datenzeit duerfen Rückspruenge aufweisen (benoetigt für nachgeforderte Datensätze). Daher kann diese Klasse nur nach Archivzeit suchen.

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.

  • Field Details

    • IDX_FILENAME

      public static final java.lang.String IDX_FILENAME
      Der Dateiname, unter dem alle Indices dieser Art gespeichert werden
      See Also:
      Constant Field Values
    • NO_VALUE

      public static final int NO_VALUE
      Flag, mit dem signalisiert wird, dass ein Eintrag "keinen Wert" hat
      See Also:
      Constant Field Values
  • Constructor Details

    • ArchiveTimeIndexImpl

      public ArchiveTimeIndexImpl​(int bufferSize, java.nio.file.Path file) throws CorruptIndexException
      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 soll
      file - Datei
      Throws:
      CorruptIndexException - Lesefehler der Indexe (z. B. korrupt)
    • ArchiveTimeIndexImpl

      public ArchiveTimeIndexImpl​(int bufferSize, java.nio.file.Path file, IndexContentDescriptor<IndexValues> contentDescriptor) throws CorruptIndexException
      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 soll
      file - Datei
      contentDescriptor - 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 IndexException
      Fügt einen neuen Eintrag in den Buffer ein. Bei Bedarf wird der Puffer auf Platte geschrieben.
      Parameters:
      dIMin - Min-Wert des Datenindex
      dIMax - Max-Wert des Datenindex
      aTMin - Min-Wert der Archivzeit
      aTMax - Max-Wert der Archivzeit
      dTMin - Min-Wert der Datenzeit
      dTMax - Max-Wert der Datenzeit
      cID - 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 IndexException
      Liefert 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 IndexException
      Liefert die IDs der Container, deren Archivzeitspanne sich mit der angegebenen Spanne überschneidet.
      Specified by:
      getContainerIDByArchiveTime in interface ArchiveTimeIndex
      Parameters:
      minATime - Beginn der Zeitspanne
      maxATime - Ende der Zeitspanne
      Returns:
      Liste von ContainerIDs mit Min/Max-Werten von DI, AT, DT
      Throws:
      IndexException - Lesefehler der Indexe (z. B. korrupt)
    • getAbsoluteATMin

      public long getAbsoluteATMin() throws IndexException
      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