public class ATimeMonotoneIndex
extends java.lang.Object
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 ueber alle Eintraege hinweg steigend sind. Datenindex und Datenzeit duerfen Rueckspruenge 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.
Modifier and Type | Class and Description |
---|---|
protected static class |
ATimeMonotoneIndex.IndexStartmode |
static class |
ATimeMonotoneIndex.Key |
Modifier and Type | Field and Description |
---|---|
static ATimeMonotoneIndex.IndexStartmode |
APPEND_REUSE_LAST |
protected static ATimeMonotoneIndex.Key |
AT |
protected static ATimeMonotoneIndex.Key |
DI |
protected static ATimeMonotoneIndex.Key |
DT |
static int |
ENTRY_LEN |
static ATimeMonotoneIndex.IndexStartmode |
ERASE_OLD |
static java.lang.String |
IDX_FILENAME
Der Dateiname, unter dem alle Indices dieser Art gespeichert werden (der Speicherort wird später bestimmt).
|
static int |
NO_VALUE |
Constructor and Description |
---|
ATimeMonotoneIndex(int size)
Erzeugt einen neuen monoton steigenden Index.
|
ATimeMonotoneIndex(int size,
java.lang.String basePath,
ATimeMonotoneIndex.IndexStartmode startmode)
Erzeugt einen neuen monoton steigenden Index.
|
Modifier and Type | Method and Description |
---|---|
void |
add(java.lang.String basePath,
long dIMin,
long dIMax,
long aTMin,
long aTMax,
long dTMin,
long dTMax,
long cID)
Fügt einen neuen Eintrag in den Buffer ein.
|
int |
capacity() |
void |
checkForAdd(java.lang.String basePath,
long dIMin,
long dIMax,
long aTMin,
long aTMax,
long dTMin,
long dTMax,
long cID)
Prüft, ob dem Index ein neuer Eintrag hinzugefügt werden könnte.
|
void |
closeIndex(java.lang.String basePath)
Schließt den Index und speichert alle geänderten Daten auf Platte.
|
int |
entries() |
long |
getAbsoluteATMin(java.lang.String basePath)
Liefert den kleinsten Archivzeit-Minwert, der jemals in diesem Index gespeichert wird.
|
protected IndexResult<ArchiveTimeIndexEntry> |
getContainerID(java.lang.String basePath,
byte[] temp,
ATimeMonotoneIndex.Key cmpKey,
long minKey,
long maxKey)
Liefert die IDs der Container, bei denen der gesuchte Key zwischen Anfang und Ende liegt.
|
IndexResult<ArchiveTimeIndexEntry> |
getContainerIDByATime(java.lang.String basePath,
byte[] temp,
long minATime,
long maxATime)
Liefert die IDs der Container, deren Archivzeitspanne sich mit der angegebenen Spanne ueberschneidet.
|
long |
getCurrentATMax() |
long |
getCurrentATMin() |
long |
getCurrentCID() |
long |
getCurrentDIMax() |
long |
getCurrentDIMin() |
long |
getCurrentDTMax() |
long |
getCurrentDTMin() |
protected IndexResult<ArchiveTimeIndexEntry> |
getMinEntry(java.lang.String basePath)
Liefert den kleinsten Eintrag bei Sortierung nach Archivzeit.
|
void |
resize(int newSize,
java.lang.String basePath)
Verändert die Größe des RingBuffers.
|
java.lang.String |
toString() |
void |
updateMax(long dIMax,
long aTMax,
long dTMax)
Aktualisiert die Maximumwerte des aktuellsten Eintrages.
|
public static final ATimeMonotoneIndex.IndexStartmode APPEND_REUSE_LAST
public static final ATimeMonotoneIndex.IndexStartmode ERASE_OLD
public static final int NO_VALUE
public static final java.lang.String IDX_FILENAME
Der Dateiname, unter dem alle Indices dieser Art gespeichert werden (der Speicherort wird später bestimmt).
protected static final ATimeMonotoneIndex.Key DI
protected static final ATimeMonotoneIndex.Key AT
protected static final ATimeMonotoneIndex.Key DT
public static final int ENTRY_LEN
public ATimeMonotoneIndex(int size, java.lang.String basePath, ATimeMonotoneIndex.IndexStartmode startmode) throws IndexException
Erzeugt einen neuen monoton steigenden Index.
Bei startmode==APPEND_REUSE_LAST wird der Ringpuffer mit den aktuellsten Daten aus einer vorhandenen Indexdate gefüllt. Zusätzlich wird der letzte Eintrag in der Indexdatei zum currentEntry. Damit kann ein Container fortgesetzt und der Key2 weiter aktualisiert werden.
Bei startmode==CREATE_NEW wird ein leerer Index erzeugt und die bisherige Indexdatei (sofern vorhanden) geloescht.
size
- Größe des Buffers (Anzahl der Einträge)basePath
- Verzeichnis der Indexdateistartmode
- ATimeMonotoneIndex.IndexStartmode.ERASE_OLD
: alte Indexdatei loeschen, ATimeMonotoneIndex.IndexStartmode.APPEND_REUSE_LAST
: anfuegen, letzten Eintrag weiterverwendenIndexException
public ATimeMonotoneIndex(int size)
Erzeugt einen neuen monoton steigenden Index. Neue Eintraege werden an eine bestehende Indexdatei angefuegt, wenn diese bereits existiert. Existiert keine Indexdatei, wird eine erzeugt. Initial werden keine Daten eingelesen; es findet kein Plattenzugriff statt.
size
- Größe des Buffers (Anzahl der Einträge). Wird mindestens auf 1 gesetzt.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
newSize
- basePath
- IndexException
public void updateMax(long dIMax, long aTMax, long dTMax) throws IndexException
Aktualisiert die Maximumwerte des aktuellsten Eintrages. Die Minimumwerte und die Container-ID bleiben unverändert.
dIMax
- zu setzendes Datenindex-MaximumaTMax
- zu setzendes Archivzeit-MaximumdTMax
- zu setzendes Datenzeit-MaximumIndexException
public long getCurrentCID()
public long getCurrentDIMin()
public long getCurrentDIMax()
public long getCurrentATMin()
public long getCurrentATMax()
public long getCurrentDTMin()
public long getCurrentDTMax()
public void add(java.lang.String basePath, 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.
basePath
- Verzeichnis der IndexdateidIMin
- 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 NeueintragsIndexException
public void checkForAdd(java.lang.String basePath, long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID) throws IndexException
Prüft, ob dem Index ein neuer Eintrag hinzugefügt werden könnte.
basePath
- Verzeichnis der IndexdateidIMin
- 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 NeueintragsIndexException
protected IndexResult<ArchiveTimeIndexEntry> getContainerID(java.lang.String basePath, byte[] temp, ATimeMonotoneIndex.Key cmpKey, long minKey, long maxKey) throws IndexException
Liefert die IDs der Container, bei denen der gesuchte Key zwischen Anfang und Ende liegt.
basePath
- Verzeichnis der Indexdateitemp
- Speicherbereich, der als Puffer dient, wenn auf die Datei zurückgegriffen werden muss.cmpKey
- minKey
- maxKey
- IndexException
public IndexResult<ArchiveTimeIndexEntry> getContainerIDByATime(java.lang.String basePath, byte[] temp, long minATime, long maxATime) throws IndexException
Liefert die IDs der Container, deren Archivzeitspanne sich mit der angegebenen Spanne ueberschneidet.
basePath
- Verzeichnis der Indexdateitemp
- Speicherbereich, der als Puffer dient, wenn auf die Datei zurückgegriffen werden muss.minATime
- Beginn der ZeitspannemaxATime
- Ende der ZeitspanneIndexException
public long getAbsoluteATMin(java.lang.String basePath) throws IndexException
Liefert den kleinsten Archivzeit-Minwert, der jemals in diesem Index gespeichert wird.
basePath
- Verzeichnis, in dem die Index-Datei liegtIndexException
- Bei Zugriffsproblemen mit der IndexDateiprotected IndexResult<ArchiveTimeIndexEntry> getMinEntry(java.lang.String basePath) throws IndexException
Liefert den kleinsten Eintrag bei Sortierung nach Archivzeit.
basePath
- Verzeichnis, in dem die Index-Datei liegtIndexException
- Bei Zugriffsproblemen mit der IndexDateipublic int capacity()
public int entries()
public void closeIndex(java.lang.String basePath) throws IndexException
Schließt den Index und speichert alle geänderten Daten auf Platte. Nach dem Aufruf von darf die Index-Instanz nicht mehr verwendet werden.
basePath
- Verzeichnis, in dem die Index-Datei liegtIndexException
public java.lang.String toString()
toString
in class java.lang.Object