Class ExponentialHistogram
java.lang.Object
org.terracotta.statistics.derived.histogram.ExponentialHistogram
An implementation of the Exponential Histogram sketch as outlined by Datar et al.
This class is *not thread-safe*, safe consumption in a multi-threaded environment will require some form of external locking.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate long[]private static final long[]private final doubleprivate int[]private longprivate final intprivate longprivate final long -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateExponentialHistogram(double epsilon, int mergeThreshold, long window, int initialSize) ExponentialHistogram(double epsilon, long window) Creates an exponential histogram maintaining a count overwindowto within @{epsilon} fractional accuracy. -
Method Summary
Modifier and TypeMethodDescriptionlongcount()Returns the approximate current count.private long[]doubleUp(long[] a) private voidensureCapacity(int logSize) doubleepsilon()Return the fractional accuracy of this exponential histogramlongexpire(long time) Expire old events.private voidinitializeArrays(int logMax) voidinsert(long time) Insert a single event attimevoidinsert(long time, long count) Bulk insertcountevents attime.private static int[]lCanonical(int l, long count) private long[]makeBoxes(long time, long count) private intmax_l(int logSize) private voidmerge(long[] bBoxes, long bTotal) private static long[]merge(long[] a, long[] b, int min, int max, long[] c) voidMerge the supplied ExponentialHistogram in to this one.private intmin_l(int logSize) private long[]pull(long[] originalBoxes, int logSize, int count) private static intreverseSort(long[] a) private static intreverseSort(long[] a, int fromIndex, int toIndex) split(double fraction) Split an exponential histogram off this one.private static int[]tailedLCanonical(int l, long count) toString()private voidtransfer(long[] originalBoxes, long[] targetBoxes, int logSize, int count)
-
Field Details
-
EMPTY_LONG_ARRAY
private static final long[] EMPTY_LONG_ARRAY -
epsilon
private final double epsilon -
mergeThreshold
private final int mergeThreshold -
window
private final long window -
boxes
private long[] boxes -
insert
private int[] insert -
total
private long total -
last
private long last
-
-
Constructor Details
-
ExponentialHistogram
public ExponentialHistogram(double epsilon, long window) Creates an exponential histogram maintaining a count overwindowto within @{epsilon} fractional accuracy.- Parameters:
epsilon- fractional accuracywindow- sliding window size
-
ExponentialHistogram
private ExponentialHistogram(double epsilon, int mergeThreshold, long window, int initialSize)
-
-
Method Details
-
merge
Merge the supplied ExponentialHistogram in to this one.- Parameters:
b- histogram to merge- Throws:
IllegalArgumentException- if the two merge-thresholds are not equals
-
merge
private void merge(long[] bBoxes, long bTotal) -
insert
Bulk insertcountevents attime.- Parameters:
time- event timecount- event count- Throws:
IllegalArgumentException- if count is negative
-
makeBoxes
private long[] makeBoxes(long time, long count) -
tailedLCanonical
private static int[] tailedLCanonical(int l, long count) -
lCanonical
private static int[] lCanonical(int l, long count) -
merge
private static long[] merge(long[] a, long[] b, int min, int max, long[] c) -
insert
public void insert(long time) Insert a single event attime- Parameters:
time- event timestamp
-
expire
public long expire(long time) Expire old events.- Parameters:
time- current timestamp- Returns:
- the count following expiry
-
min_l
private int min_l(int logSize) -
max_l
private int max_l(int logSize) -
count
public long count()Returns the approximate current count.- Returns:
- the approximate count
-
split
Split an exponential histogram off this one.The returned histogram will contain {code fraction} of the events in this one.
- Parameters:
fraction- splitting fraction- Returns:
- the new histogram
-
transfer
private void transfer(long[] originalBoxes, long[] targetBoxes, int logSize, int count) -
pull
private long[] pull(long[] originalBoxes, int logSize, int count) -
doubleUp
private long[] doubleUp(long[] a) -
toString
-
reverseSort
private static int reverseSort(long[] a) -
reverseSort
private static int reverseSort(long[] a, int fromIndex, int toIndex) -
ensureCapacity
private void ensureCapacity(int logSize) -
initializeArrays
private void initializeArrays(int logMax) -
epsilon
public double epsilon()Return the fractional accuracy of this exponential histogram- Returns:
- fractional accuracy
-