org.jrobin.core
Class RrdBackend
public abstract
class
RrdBackend
extends Object
Base implementation class for all backend classes. Each Round Robin Database object
(
RrdDb object) is backed with a single RrdBackend object which performs
actual I/O operations on the underlying storage. JRobin supports
three different bakcends out of the box:
- RrdFileBackend: objects of this class are created from the
RrdFileBackendFactory class. This was the default backend used in all
JRobin releases prior to 1.4.0. It uses java.io.* package and
RandomAccessFile class to store RRD data in files on the disk.
- RrdNioBackend: objects of this class are created from the
RrdNioBackendFactory class. The backend uses java.io.* and java.nio.*
classes (mapped ByteBuffer) to store RRD data in files on the disk. This backend is fast, very fast,
but consumes a lot of memory (borrowed not from the JVM but from the underlying operating system
directly). This is the default backend used in JRobin since 1.4.0 release.
- RrdMemoryBackend: objects of this class are created from the
RrdMemoryBackendFactory class. This backend stores all data in memory. Once
JVM exits, all data gets lost. The backend is extremely fast and memory hungry.
To create your own backend in order to provide some custom type of RRD storage,
you should do the following:
- Create your custom RrdBackend class (RrdCustomBackend, for example)
by extending RrdBackend class. You have to implement all abstract methods defined
in the base class.
- Create your custom RrdBackendFactory class (RrdCustomBackendFactory,
for example) by extending RrdBackendFactory class. You have to implement all
abstract methods defined in the base class. Your custom factory class will actually
create custom backend objects when necessary.
- Create instance of your custom RrdBackendFactory and register it as a regular
factory available to JRobin framework. See javadoc for RrdBackendFactory to
find out how to do this
Method Summary |
void | close()
Closes the underlying backend.
|
abstract long | getLength()
Returns the number of RRD bytes in the underlying storage.
|
String | getPath()
Returns path to the storage.
|
protected boolean | isCachingAllowed()
This method suggests the caching policy to the JRobin frontend (high-level) classes. |
protected abstract void | read(long offset, byte[] b)
Reads an array of bytes from the underlying storage starting from the given
storage offset.
|
byte[] | readAll()
Reads all RRD bytes from the underlying storage
|
protected abstract void | setLength(long length)
Sets the number of bytes in the underlying RRD storage.
|
protected abstract void | write(long offset, byte[] b)
Writes an array of bytes to the underlying storage starting from the given
storage offset.
|
protected RrdBackend(String path)
Creates backend for a RRD storage with the given path.
Parameters: path String identifying RRD storage. For files on the disk, this
argument should represent file path. Other storage types might interpret
this argument differently.
public void close()
Closes the underlying backend.
Throws: IOException Thrown in case of I/O error
public abstract long getLength()
Returns the number of RRD bytes in the underlying storage.
Returns: Number of RRD bytes in the storage.
Throws: IOException Thrown in case of I/O error.
public String getPath()
Returns path to the storage.
Returns: Storage path
protected boolean isCachingAllowed()
This method suggests the caching policy to the JRobin frontend (high-level) classes. If
true
is returned, frontent classes will cache frequently used parts of a RRD file in memory to improve
performance. If false is returned, high level classes will never cache RRD file sections
in memory.
Returns: true
if file caching is enabled, false
otherwise. By default, the
method returns true
but it can be overriden in subclasses.
protected abstract void read(long offset, byte[] b)
Reads an array of bytes from the underlying storage starting from the given
storage offset.
Parameters: offset Storage offset. b Array which receives bytes from the underlying storage
Throws: IOException Thrown in case of I/O error
public final byte[] readAll()
Reads all RRD bytes from the underlying storage
Returns: RRD bytes
Throws: IOException Thrown in case of I/O error
protected abstract void setLength(long length)
Sets the number of bytes in the underlying RRD storage.
This method is called only once, immediately after a new RRD storage gets created.
Parameters: length Length of the underlying RRD storage in bytes.
Throws: IOException Thrown in case of I/O error.
protected abstract void write(long offset, byte[] b)
Writes an array of bytes to the underlying storage starting from the given
storage offset.
Parameters: offset Storage offset. b Array of bytes that should be copied to the underlying storage
Throws: IOException Thrown in case of I/O error