de.bsvrz.ars.ars.persistence.index
Class DataIndexIndex

java.lang.Object
  extended by de.bsvrz.ars.ars.persistence.index.DataIndexIndex

public class DataIndexIndex
extends java.lang.Object

Diese Klasse stellt einen Datenindex-Index dar. Sie verhält sich ähnlich dem DataTimeIndex. Die Folge der Eintraege (min, max) ist nicht monoton, weil es beim Nachfordern Rueckspruenge geben kann. Stattdessen sind die Eintraege nur nach dem min-Wert sortiert. Ein Eintrag enthaelt Minimum, Maximum des Datenindex und die ContainerID.

Version:
$Revision: 1.1 $ / $Date: 2008/01/22 16:39:55 $ / ($Author: yvonnes $)
Author:
beck et al. projects GmbH, Phil Schrettenbrunner

Nested Class Summary
static class DataIndexIndex.IndexStartmode
          Modi, mit denen ein Index angelegt werden kann (siehe DataTimeIndex.DataTimeIndex(int, String, byte[], IndexStartmode) )
 
Field Summary
static DataIndexIndex.IndexStartmode APPEND_REUSE_LAST
           
static DataIndexIndex.IndexStartmode ERASE_OLD
           
static java.lang.String IDX_FILENAME
          Dateiname, unter dem alle Indices dieser Art gespeichert werden
static int NO_VALUE
          Flag, mit dem signalisiert wird, dass ein Eintrag "keinen Wert" hat
 
Constructor Summary
DataIndexIndex(int bufferSize)
          Erzeugt einen neuen DatenIndexIndex.
DataIndexIndex(int bufferSize, java.lang.String basePath, byte[] temp, DataIndexIndex.IndexStartmode startmode)
          Erzeugt einen neuen DatenIndex.
 
Method Summary
 void add(java.lang.String basePath, byte[] temp, long dIMin, long dIMax, long contId)
          Fügt dem Index einen neuen Eintrag hinzu.
 int capacity()
          Anzahl der Einträge, die dieser Index im RAM halten kann
 void closeIndex(java.lang.String basePath, byte[] temp)
          Schließt den Index und speichert alle geänderten Daten auf Platte.
 int entries()
          Anzahl der Einträge, die dieser Index im RAM hält
 long getAbsolutDIdxMin(java.lang.String basePath)
          Liefert den kleinsten DT Min Wert, der jemals in diesem Index gespeichert wird.
 IndexResult getContainerID(java.lang.String basePath, byte[] temp, long dIMin, long dIMax)
          Liefert eine Matrix mit DIMin/Max und ContainerIds, deren DTMin/Max-Werte zwischen dTMin und dTMax liegen.
 long getCurrentCID()
          Liefert die aktuelle Container ID.
 long getCurrentDIMax()
          Liefert vom aktuellen Eintrag den Max-Wert des DatenIndex
 long getCurrentDIMin()
          Liefert vom aktuellen Eintrag den Min-Wert des DatenIndex
 void resize(int newSize, java.lang.String basePath)
          Verändert die Größe des RingBuffers.
 java.lang.String toString()
          Gibt den Inhalt des ByteBuffers als String aus, inkl Angaben über Kapazität, Anzahl der Einträge und des CurrentEntries.
 void updateMax(long newDIMax)
          Aktualisiert den Max-Wert des aktuellsten Eintrages.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

IDX_FILENAME

public static final java.lang.String IDX_FILENAME
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

APPEND_REUSE_LAST

public static final DataIndexIndex.IndexStartmode APPEND_REUSE_LAST

ERASE_OLD

public static final DataIndexIndex.IndexStartmode ERASE_OLD
Constructor Detail

DataIndexIndex

public DataIndexIndex(int bufferSize,
                      java.lang.String basePath,
                      byte[] temp,
                      DataIndexIndex.IndexStartmode startmode)
               throws IndexException
Erzeugt einen neuen DatenIndex. Bei startmode==APPEND_REUSE_LAST wird der Ringpuffer mit den aktuellsten Daten aus einer vorhandenen Indexdatei gefüllt. Der Eintrag mit der größten ContainerId wird als currentEntry reaktiviert. Damit kann ein Container fortgesetzt und der reaktivierte Eintrag weiter aktualisiert werden. Bei startmode==ERASE_OLD 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
basePath - Verzeichnis, in dem die Indexdatei liegt
temp - Ein temporäres ByteArray, das zum Suchen des currentEntries verwendet wird
startmode - DataIndexIndex.IndexStartmode.ERASE_OLD: alte Indexdatei loeschen, DataIndexIndex.IndexStartmode.APPEND_REUSE_LAST: anfuegen, letzten Eintrag weiterverwenden
Throws:
IndexException - Bei Problemem mit dem Dateizugriff

DataIndexIndex

public DataIndexIndex(int bufferSize)
Erzeugt einen neuen DatenIndexIndex. Eine eventuell vorhandene Datei wird weiterbenutzt, ein weiterbenutzen des currentEntries ist nicht möglich.

Parameters:
bufferSize - Anzahl der Einträge, die der die der Index im RAM halten soll
Method Detail

updateMax

public void updateMax(long newDIMax)
               throws IndexException
Aktualisiert den Max-Wert des aktuellsten Eintrages. Der Min-Wert und die ContainerID bleiben unverändert

Parameters:
newDIMax - neuer Wert für DatenIndexIndex-Max
Throws:
IndexException - Wenn der neue Wert kleiner als der dazugehörige Min-Wert ist oder wenn keinen currentEntry gibt

getCurrentCID

public long getCurrentCID()
Liefert die aktuelle Container ID. Wenn es noch keine Aktuelle Container ID gibt, wird -1 zurückgeliefert

Returns:
die aktuelle Container ID oder -1, wenn es keinen aktuellen Entry gibt.

getCurrentDIMin

public long getCurrentDIMin()
Liefert vom aktuellen Eintrag den Min-Wert des DatenIndex

Returns:
Min-Wert des DatenIndex des aktuellen Eintrags

getCurrentDIMax

public long getCurrentDIMax()
Liefert vom aktuellen Eintrag den Max-Wert des DatenIndex

Returns:
Max-Wert des DatenIndex des aktuellen Eintrags

capacity

public int capacity()
Anzahl der Einträge, die dieser Index im RAM halten kann

Returns:
Anzahl der Einträge

entries

public int entries()
Anzahl der Einträge, die dieser Index im RAM hält

Returns:
Anzahl der Einträge

add

public void add(java.lang.String basePath,
                byte[] temp,
                long dIMin,
                long dIMax,
                long contId)
         throws IndexException
Fügt dem Index einen neuen Eintrag hinzu. Dabei wird der derzeitig aktuelle Eintrag abgeschlossen. Führt dies dazu, dass keine weiteren freien Plätze im Cache vorhanden sind, werden die Änderungen auf Platte geschrieben. Wenn der Cache noch vollständig leer ist, werden die aktuellsten Daten aus der Index-Datei geladen.

Parameters:
basePath - Verzeichnis, in dem die Index-Datei liegt
temp - Puffer, der beim Einlesen/Schreiben der Index-Datei verwendet wird
dIMin - DatenIndex Min-Wert
dIMax - DatenIndex Max-Wert
contId - Container ID
Throws:
IndexException - Bei Problemem mit der Index-Datei

getContainerID

public IndexResult getContainerID(java.lang.String basePath,
                                  byte[] temp,
                                  long dIMin,
                                  long dIMax)
                           throws IndexException
Liefert eine Matrix mit DIMin/Max und ContainerIds, deren DTMin/Max-Werte zwischen dTMin und dTMax liegen. Wird diese Methode aufgerufen wenn der Cache noch leer ist, werden die aktuellsten Daten aus der Datei nachgeladen.

Parameters:
basePath - Verzeichnis, in dem die Index-Datei liegt
temp - Puffer, der beim Einlesen/Schreiben der Index-Datei verwendet wird
dTMin - Min-Wert der Zeitspanne
dTMax - Max-Wert der Zeitspanne
Returns:
IndexResult-Objekt, das die Index innerhalb der gesuchten Zeitspanne enthält (DT und DI Werte, keine AT Werte)
Throws:
IndexException - Bei Problemem mit der IndexDatei

getAbsolutDIdxMin

public long getAbsolutDIdxMin(java.lang.String basePath)
                       throws IndexException
Liefert den kleinsten DT Min Wert, der jemals in diesem Index gespeichert wird.

Parameters:
basePath - Verzeichnis, in dem die Index-Datei liegt
Returns:
Kleinsten Datenindex oder -1, falls keiner vorhanden
Throws:
IndexException - Bei Zugriffsproblemen mit der IndexDatei

closeIndex

public void closeIndex(java.lang.String basePath,
                       byte[] temp)
                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.

Parameters:
basePath - Verzeichnis, in dem die Index-Datei liegt
temp - Puffer, der beim Schreiben der Index-Datei verwendet wird
Throws:
IndexException

toString

public java.lang.String toString()
Gibt den Inhalt des ByteBuffers als String aus, inkl Angaben über Kapazität, Anzahl der Einträge und des CurrentEntries.

Overrides:
toString in class java.lang.Object
Returns:
ByteBuffer als String

resize

public void resize(int newSize,
                   java.lang.String basePath)
            throws IndexException
Verändert die Größe des RingBuffers. Beim Verkleinern werden nicht gespeicherte Einträge auf Platte geschrieben

Parameters:
newSize -
basePath -
Throws:
IndexException


Copyright © 2005-2008 beck et al. projects GmbH All Rights Reserved.