com.bigdata.btree.raba.codec
Interface IRabaCoder

All Superinterfaces:
Serializable
All Known Implementing Classes:
CanonicalHuffmanRabaCoder, ConditionalRabaCoder, EmptyRabaValueCoder, FastRDFValueCoder, FastRDFValueCoder2, FrontCodedRabaCoder, FrontCodedRabaCoder.DefaultFrontCodedRabaCoder, SimpleRabaCoder

public interface IRabaCoder
extends Serializable

Interface for coding (compressing) a logical byte[][] and for accessing the coded data in place.

Version:
$Id: IRabaCoder.java 2265 2009-10-26 12:51:06Z thompsonbry $
Author:
Bryan Thompson
See Also:
IRaba

Method Summary
 ICodedRaba decode(AbstractFixedByteArrayBuffer data)
          Return an IRaba which can access the coded data.
 AbstractFixedByteArrayBuffer encode(IRaba raba, DataOutputBuffer buf)
          Encode the data.
 ICodedRaba encodeLive(IRaba raba, DataOutputBuffer buf)
          Encode the data, returning an ICodedRaba.
 boolean isKeyCoder()
          Return true if this implementation can code B+Tree keys (supports search on the coded representation).
 boolean isValueCoder()
          Return true if this implementation can code B+Tree values (allows nulls).
 

Method Detail

isKeyCoder

boolean isKeyCoder()
Return true if this implementation can code B+Tree keys (supports search on the coded representation). Note that some implementations can code either keys or values.


isValueCoder

boolean isValueCoder()
Return true if this implementation can code B+Tree values (allows nulls). Note that some implementations can code either keys or values.


encodeLive

ICodedRaba encodeLive(IRaba raba,
                      DataOutputBuffer buf)
Encode the data, returning an ICodedRaba. Implementations of this method should be optimized for the very common use case where the caller requires immediate access to the coded data record. In that case, many of the IRabaCoder implementations can be optimized by passing the underlying decoding object directly into an alternative constructor for the ICodedRaba. The byte[] slice for the coded data record is available from ICodedRaba.data().

This method covers the vast major of the use cases for coding data, which is to code B+Tree keys or values for a node or leaf that has been evicted from the AbstractBTree's write retention queue. The common use case is to wrap a coded record that was read from an IRawStore. The IndexSegmentBuilder is a special case, since the coded record will not be used other than to write it on the disk.


encode

AbstractFixedByteArrayBuffer encode(IRaba raba,
                                    DataOutputBuffer buf)
Encode the data.

Note: Implementations of this method are typically heavy. While it is always valid to encode(IRaba, DataOutputBuffer) an IRaba , DO NOT invoke this arbitrarily on data which may already be coded. The ICodedRaba interface will always be implemented for coded data.

Parameters:
raba - The data.
buf - A buffer on which the coded data will be written.
Returns:
A slice onto the post-condition state of the caller's buffer whose view corresponds to the coded record. This may be written directly onto an output stream or the slice may be converted to an exact fit byte[].
Throws:
UnsupportedOperationException - if IRaba.isKeys() is true and this IRabaCoder can not code keys.
UnsupportedOperationException - if IRaba.isKeys() is false and this IRabaCoder can not code values.

decode

ICodedRaba decode(AbstractFixedByteArrayBuffer data)
Return an IRaba which can access the coded data. In general, implementations SHOULD NOT materialize a backing byte[][]. Instead, the implementation should access the data in place within the caller's buffer. Frequently used fields MAY be cached, but the whole point of the IRabaCoder is to minimize the in-memory footprint for the B+Tree by using a coded (aka compressed) representation of the keys and values whenever possible.

Parameters:
data - The record containing the coded data.
Returns:
A view of the coded data.


Copyright © 2006-2009 SYSTAP, LLC. All Rights Reserved.