public GorillaCompressor(long timestamp, BitOutput output, Predictor predictor) { blockTimestamp = timestamp; out = output; addHeader(timestamp); this.valueCompressor = new ValueCompressor(output, predictor); }
private void writeFirst(long timestamp, long value) { storedDelta = (int) (timestamp - blockTimestamp); storedTimestamp = timestamp; out.writeBits(storedDelta, FIRST_DELTA_BITS); valueCompressor.writeFirst(value); }
protected void compressValue(long value) { // In original Gorilla, Last-Value predictor is used long diff = predictor.predict() ^ value; predictor.update(value); if(diff == 0) { // Write 0 out.skipBit(); } else { int leadingZeros = Long.numberOfLeadingZeros(diff); int trailingZeros = Long.numberOfTrailingZeros(diff); out.writeBit(); // Optimize to writeNewLeading / writeExistingLeading? if(leadingZeros >= storedLeadingZeros && trailingZeros >= storedTrailingZeros) { writeExistingLeading(diff); } else { writeNewLeading(diff, leadingZeros, trailingZeros); } } }
/** * Adds a new double value to the series. Note, values must be inserted in order. * * @param timestamp Timestamp which is inside the allowed time block (default 24 hours with millisecond precision) * @param value next floating point value in the series */ public void addValue(long timestamp, double value) { if(storedTimestamp == 0) { writeFirst(timestamp, Double.doubleToRawLongBits(value)); return; } compressTimestamp(timestamp); valueCompressor.compressValue(Double.doubleToRawLongBits(value)); }
protected void compressValue(long value) { // In original Gorilla, Last-Value predictor is used long diff = predictor.predict() ^ value; predictor.update(value); if(diff == 0) { // Write 0 out.skipBit(); } else { int leadingZeros = Long.numberOfLeadingZeros(diff); int trailingZeros = Long.numberOfTrailingZeros(diff); out.writeBit(); // Optimize to writeNewLeading / writeExistingLeading? if(leadingZeros >= storedLeadingZeros && trailingZeros >= storedTrailingZeros) { writeExistingLeading(diff); } else { writeNewLeading(diff, leadingZeros, trailingZeros); } } }
/** * Adds a new double value to the series. Note, values must be inserted in order. * * @param timestamp Timestamp which is inside the allowed time block (default 24 hours with millisecond precision) * @param value next floating point value in the series */ public void addValue(long timestamp, double value) { if(storedTimestamp == 0) { writeFirst(timestamp, Double.doubleToRawLongBits(value)); return; } compressTimestamp(timestamp); valueCompressor.compressValue(Double.doubleToRawLongBits(value)); }
/** * Adds a new long value to the series. Note, values must be inserted in order. * * @param timestamp Timestamp which is inside the allowed time block (default 24 hours with millisecond precision) * @param value next floating point value in the series */ public void addValue(long timestamp, long value) { if(storedTimestamp == 0) { writeFirst(timestamp, value); } else { compressTimestamp(timestamp); valueCompressor.compressValue(value); } }
private void writeFirst(long timestamp, long value) { storedDelta = (int) (timestamp - blockTimestamp); storedTimestamp = timestamp; out.writeBits(storedDelta, FIRST_DELTA_BITS); valueCompressor.writeFirst(value); }
public GorillaCompressor(long timestamp, BitOutput output, Predictor predictor) { blockTimestamp = timestamp; out = output; addHeader(timestamp); this.valueCompressor = new ValueCompressor(output, predictor); }
/** * Adds a new long value to the series. Note, values must be inserted in order. * * @param timestamp Timestamp which is inside the allowed time block (default 24 hours with millisecond precision) * @param value next floating point value in the series */ public void addValue(long timestamp, long value) { if(storedTimestamp == 0) { writeFirst(timestamp, value); } else { compressTimestamp(timestamp); valueCompressor.compressValue(value); } }