package voldemort.store.stats;
import java.text.NumberFormat;
/**
* Statistics about the keys and values in a store
*
*
*/
public class DataSetStats {
private long numEntries = 0;
private long keyBytes = 0;
private long valueBytes = 0;
private int minKeySize = Integer.MAX_VALUE;
private int minValueSize = Integer.MAX_VALUE;
private int maxKeySize = Integer.MIN_VALUE;
private int maxValueSize = Integer.MIN_VALUE;
public DataSetStats() {}
public void countEntry(int keySize, int valueSize) {
this.numEntries++;
this.keyBytes += keySize;
this.valueBytes += valueSize;
if(keySize > this.maxKeySize)
this.maxKeySize = keySize;
if(keySize < this.minKeySize)
this.minKeySize = keySize;
if(valueSize > this.maxValueSize)
this.maxValueSize = valueSize;
if(valueSize < this.minValueSize)
this.minValueSize = valueSize;
}
public long getTotalEntries() {
return numEntries;
}
public long getTotalKeyBytes() {
return keyBytes;
}
public long getTotalValueBytes() {
return valueBytes;
}
public int getMaxKeySize() {
return maxKeySize;
}
public int getMaxValueSize() {
return maxValueSize;
}
public int getMinKeySize() {
return minKeySize;
}
public int getMinValueSize() {
return minValueSize;
}
public long getTotalBytes() {
return getTotalKeyBytes() + getTotalValueBytes();
}
public double getAvgKeySize() {
return getTotalKeyBytes() / (double) getTotalEntries();
}
public double getAvgValueSize() {
return getTotalValueBytes() / (double) getTotalEntries();
}
public double getAvgEntrySize() {
return getTotalBytes() / (double) getTotalEntries();
}
public void add(DataSetStats stats) {
this.numEntries += stats.getTotalEntries();
this.keyBytes += stats.getTotalKeyBytes();
this.valueBytes = stats.getTotalValueBytes();
this.minKeySize = Math.min(this.minKeySize, stats.getMinKeySize());
this.minValueSize = Math.min(this.minValueSize, stats.getMinValueSize());
this.maxKeySize = Math.max(this.maxKeySize, stats.getMaxKeySize());
this.maxValueSize = Math.max(this.maxValueSize, stats.getMaxValueSize());
}
@Override
public String toString() {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(1);
return "Total entries: " + getTotalEntries() + "\n" + "Total bytes: " + getTotalBytes()
+ "\n" + "Avg. key size: " + nf.format(getAvgKeySize()) + "\n" + "Avg. value size: "
+ nf.format(getAvgValueSize()) + "\n" + "Smallest key size: " + getMinValueSize()
+ "\n" + "Largest key size: " + getMinValueSize() + "\n" + "Smallest value size: "
+ getMinValueSize() + "\n" + "Largest value size: " + getMaxValueSize();
}
}