Class ExponentialHistogram
- java.lang.Object
-
- org.terracotta.statistics.derived.histogram.ExponentialHistogram
-
public class ExponentialHistogram extends java.lang.ObjectAn 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
Fields Modifier and Type Field Description private long[]boxesprivate static long[]EMPTY_LONG_ARRAYprivate doubleepsilonprivate int[]insertprivate longlastprivate intmergeThresholdprivate longtotalprivate longwindow
-
Constructor Summary
Constructors Modifier Constructor Description privateExponentialHistogram(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
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description longcount()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(ExponentialHistogram b)Merge 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)ExponentialHistogramsplit(double fraction)Split an exponential histogram off this one.private static int[]tailedLCanonical(int l, long count)java.lang.StringtoString()private voidtransfer(long[] originalBoxes, long[] targetBoxes, int logSize, int count)
-
-
-
Constructor Detail
-
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 Detail
-
merge
public void merge(ExponentialHistogram b)
Merge the supplied ExponentialHistogram in to this one.- Parameters:
b- histogram to merge- Throws:
java.lang.IllegalArgumentException- if the two merge-thresholds are not equals
-
merge
private void merge(long[] bBoxes, long bTotal)
-
insert
public void insert(long time, long count) throws java.lang.IllegalArgumentExceptionBulk insertcountevents attime.- Parameters:
time- event timecount- event count- Throws:
java.lang.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
public ExponentialHistogram split(double fraction)
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
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
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
-
-