public class ATimeMonotoneIndex extends Object
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 |
private byte[] |
byteArray |
protected static ATimeMonotoneIndex.Key |
DI |
protected static ATimeMonotoneIndex.Key |
DT |
static int |
ENTRY_LEN |
static ATimeMonotoneIndex.IndexStartmode |
ERASE_OLD |
static String |
IDX_FILENAME
Der Dateiname, unter dem alle Indices dieser Art gespeichert werden (der Speicherort wird später bestimmt).
|
private boolean |
ignoreLastFileEntry |
private static boolean |
MAX |
private static boolean |
MIN |
static int |
NO_VALUE |
private boolean |
noActualEntry |
private int |
rbFstEnt |
private int |
rbFstUnsaved |
private int |
rbLstEnt |
Constructor and Description |
---|
ATimeMonotoneIndex(int size)
Erzeugt einen neuen monoton steigenden Index.
|
ATimeMonotoneIndex(int size,
String basePath,
ATimeMonotoneIndex.IndexStartmode startmode)
Erzeugt einen neuen monoton steigenden Index.
|
Modifier and Type | Method and Description |
---|---|
void |
add(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.
|
private IndexResult |
binaryFileSearch(String basePath,
byte[] tmpBuf,
ATimeMonotoneIndex.Key cmpKey,
long minKey,
long maxKey)
Führt eine binärSuche in der IndexDatei durch.
|
private int |
binaryMemSearch(ATimeMonotoneIndex.Key cmpKey,
long key)
Sucht im Speicher nach dem ersten Eintrag, der auf den übergebenen Key passt.
|
int |
capacity() |
private void |
checkFileLength(File indexFile,
long fileLength) |
void |
checkForAdd(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.
|
private File |
checkIndexFile(String basePath)
Prüft grundlegende Eigenschaften einer Indexdatei.
|
void |
closeIndex(String basePath)
Schließt den Index und speichert alle geänderten Daten auf Platte.
|
private void |
closeRandomAccessFile(RandomAccessFile indexFile)
Schließt die Indexdatei.
|
private int |
compare(ATimeMonotoneIndex.Key cmpKey,
int index,
long key)
Vergleicht den Eintrag an der gegebenen Position im Index mit dem gegebenen Schlüssel.
|
private int |
countMatchingEntries(int startAt,
int numOfEntries,
ATimeMonotoneIndex.Key cmpKey,
long key)
Sucht den Puffer beginnend bei startAt in Richtung neuesten Eintrag nach Einträgen ab, die zum Vergleichswert passen.
|
int |
entries() |
private void |
flush(String basePath)
Speichert den aktuellen Buffer in die Datei.
|
long |
getAbsoluteATMin(String basePath)
Liefert den kleinsten Archivzeit-Minwert, der jemals in diesem Index gespeichert wird.
|
private long |
getCID(int pos) |
protected IndexResult |
getContainerID(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 |
getContainerIDByATime(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() |
private long |
getEntry(ATimeMonotoneIndex.Key entrKey,
boolean min,
int pos)
Liefert den Key1 (Min) an der angegebenen Indexposition.
|
protected IndexResult |
getMinEntry(String basePath)
Liefert den kleinsten Eintrag bei Sortierung nach Archivzeit.
|
private int |
rb2pos(int rbPos)
Rechnet eine absolute Position im Feld (gezählt in Einträgen) in eine Ringpuffer-Position um (0 = neuester Eintrag).
|
private void |
readFile(String basePath)
Füllt den Buffer so weit es geht mit den Daten aus der Indexdatei.
|
private int |
readSearchChunk(RandomAccessFile raf,
int chunkNo,
byte[] buf,
int bufSize)
Liest einen Chunk zum Suchen in den Speicher.
|
void |
resize(int newSize,
String basePath)
Verändert die Größe des RingBuffers.
|
private void |
reuseIndexFromFile(String basePath)
Füllt den Buffer so weit es geht mit den Daten aus der Indexdatei.
|
private void |
setEntry(int pos,
long dIMin,
long dIMax,
long aTMin,
long aTMax,
long dTMin,
long dTMax,
long cID)
Setzt einen Eintrag an der angegebenen Indexposition.
|
private int |
stepRB(int rbPos)
Führt einen Schritt im Ringpuffer aus (und bricht dabei an der Feldgrenze um).
|
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 String IDX_FILENAME
protected static final ATimeMonotoneIndex.Key DI
protected static final ATimeMonotoneIndex.Key AT
protected static final ATimeMonotoneIndex.Key DT
private static final boolean MIN
private static final boolean MAX
public static final int ENTRY_LEN
private byte[] byteArray
private int rbFstEnt
private int rbLstEnt
private int rbFstUnsaved
private boolean ignoreLastFileEntry
private boolean noActualEntry
public ATimeMonotoneIndex(int size, String basePath, ATimeMonotoneIndex.IndexStartmode startmode) throws IndexException
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)
size
- Größe des Buffers (Anzahl der Einträge). Wird mindestens auf 1 gesetzt.public void resize(int newSize, String basePath) throws IndexException
newSize
- basePath
- IndexException
private void reuseIndexFromFile(String basePath) throws IndexException, CorruptIndexException
basePath
- Verzeichnis der IndexdateiIndexException
- Wenn es Probleme mit dem Einlesen der Datei gibt.CorruptIndexException
- Wenn die Eingelesene Indexdatei beschädigt ist.private void readFile(String basePath) throws IndexException
basePath
- Verzeichnis der IndexdateiIndexException
- Wenn es Probleme mit dem Einlesen der Datei gibt.private long getCID(int pos)
pos
- Indexposition (0 = neuester Eintrag, gezaehlt in Eintraegen)private long getEntry(ATimeMonotoneIndex.Key entrKey, boolean min, int pos)
entrKey
- min
- pos
- Indexposition (0 = neuester Eintrag, gezaehlt in Eintraegen)private void setEntry(int pos, long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID) throws IndexException
pos
- Indexposition (0 = neuester Eintrag, gezaehlt in Eintraegen)dIMin
- zu setzendes Datenindex-MinimumdIMax
- zu setzendes Datenindex-MaximumaTMin
- zu setzendes Archivzeit-MinimumaTMax
- zu setzendes Archivzeit-MaximumdTMin
- zu setzendes Datenzeit-MinimumdTMax
- zu setzendes Datenzeit-MaximumcID
- zu setzende Container-IDIndexException
public void updateMax(long dIMax, long aTMax, long dTMax) throws IndexException
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(String basePath, long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID) throws IndexException
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(String basePath, long dIMin, long dIMax, long aTMin, long aTMax, long dTMin, long dTMax, long cID) throws IndexException
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
private int stepRB(int rbPos)
rbPos
- Absolute Position im Feld (gezählt in Einträgen).private int rb2pos(int rbPos)
rbPos
- absolute Position im Feld (gezählt in Einträgen).protected IndexResult getContainerID(String basePath, byte[] temp, ATimeMonotoneIndex.Key cmpKey, long minKey, long maxKey) throws IndexException
basePath
- Verzeichnis der Indexdateitemp
- Speicherbereich, der als Puffer dient, wenn auf die Datei zurückgegriffen werden muss.cmpKey
- minKey
- maxKey
- IndexException
public IndexResult getContainerIDByATime(String basePath, byte[] temp, long minATime, long maxATime) throws IndexException
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(String basePath) throws IndexException
basePath
- Verzeichnis, in dem die Index-Datei liegtIndexException
- Bei Zugriffsproblemen mit der IndexDateiprotected IndexResult getMinEntry(String basePath) throws IndexException
basePath
- Verzeichnis, in dem die Index-Datei liegtIndexException
- Bei Zugriffsproblemen mit der IndexDateiprivate int countMatchingEntries(int startAt, int numOfEntries, ATimeMonotoneIndex.Key cmpKey, long key) throws IndexException
startAt
- StartpositionnumOfEntries
- Maximal zu durchsuchende Zahl von EinträgencmpKey
- Vergleichswert des Eintragskey
- VergleichsschluesselIndexException
public int capacity()
public int entries()
private int binaryMemSearch(ATimeMonotoneIndex.Key cmpKey, long key) throws IndexException
cmpKey
- Vergleichswert des Eintragskey
- StartschlüsselIndexException
private int compare(ATimeMonotoneIndex.Key cmpKey, int index, long key) throws IndexException
cmpKey
- Vergleichswert des Eintragsindex
- Position im Index (0 = neueste)key
- VergleichsschlüsselIndexException
private IndexResult binaryFileSearch(String basePath, byte[] tmpBuf, ATimeMonotoneIndex.Key cmpKey, long minKey, long maxKey) throws IndexException
basePath
- Verzeichnis der IndexdateitmpBuf
- Ein temporäres Array, das als Buffer verwendet wird.minKey
- Schlüssel, der gesucht wirdIndexException
- Wenn es Probleme mit der IndexDatei gibt.private int readSearchChunk(RandomAccessFile raf, int chunkNo, byte[] buf, int bufSize) throws IOException
ATimeMonotoneIndex.IndexStartmode.APPEND_REUSE_LAST
weiterverwendet wird, wird
der letzte Dateieintrag ignoriert.raf
- IndexdateichunkNo
- Nummer des Chunks, beginnend bei 0buf
- SpeicherbereichbufSize
- Größe des Speicherbereichs in Byte (ist stets durch entryLen() teilbar)IOException
private File checkIndexFile(String basePath) throws IndexException
basePath
- Verzeichnis der IndexdateiIndexException
private void checkFileLength(File indexFile, long fileLength) throws CorruptIndexException
CorruptIndexException
private void flush(String basePath) throws IndexException
ATimeMonotoneIndex.IndexStartmode.APPEND_REUSE_LAST
gestartet wurde, wird beim ersten Flushen der letzte Dateieintrag ueberschrieben.basePath
- Verzeichnis der IndexdateiIndexException
- Wenn es Probleme mit der IndexDatei gibtpublic void closeIndex(String basePath) throws IndexException
basePath
- Verzeichnis, in dem die Index-Datei liegtIndexException
private void closeRandomAccessFile(RandomAccessFile indexFile) throws IndexException
indexFile
- IndexdateiIndexException