我正在尝试衡量Database Insert
的效果。我已在ConcurrentHashMap
中捕获了所有这些效果数字。我正在尝试制作这些数字的直方图。
在那个并发哈希映射中,它将是这样的。我引用了一个例子。但是该地图将拥有更多的数据意味着更多的关键值对。
Key- 11
Value- 2
这意味着,2个电话在11毫秒内回来了。下面的另一个例子
Key - 30
Value -1
这意味着,1个电话在30毫秒内回来了。
基于上面的地图,我试图做这样的事情 -
Number of calls came back in between 1 and 10 ms
Number of calls came back in between 10 and 20 ms
Number of calls came back in between 20 and 30 ms
Number of calls came back in between 30 and 40 ms
Number of calls came back in between 40 and 50 ms
Number of calls came back in between 50 and 60 ms
Number of calls came back in between 60 and 70 ms
Number of calls came back in between 70 and 80 ms
Number of calls came back in between 80 and 90 ms
Number of calls came back in between 90 and 100 ms
Number of calls came back in greater than 100 ms
我无法找到一种从该地图制作上述直方图的简单方法。我唯一能想到的就是对各种计数器进行硬编码,如果它落在该特定范围内,则继续增加计数器。但这看起来并不是一种干净的方式。有什么想法我怎么解决这个问题?
private static void logHistogramInfo() {
// here histogram is the concurrenthashmap
System.out.println(histogram);
}
答案 0 :(得分:1)
Java中的简单直方图:
import java.util.HashMap;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
public class Histogram {
public static void main(String[] args) {
Map<Integer,Integer> data = new HashMap<Integer,Integer>();
data.put(10, 2);
data.put(20, 3);
data.put(30, 5);
data.put(40, 15);
data.put(50, 4);
drawHistogram(data);
}
private static void drawHistogram(Map<Integer,Integer> data){
SortedSet<Integer> keys = new TreeSet<Integer>(data.keySet());
for(Integer key : keys){
System.out.print(key + " : ");
for(int i = 0; i< data.get(key); i++){
System.out.print("*");
}
System.out.println();
}
}
}
答案 1 :(得分:0)
这是一个快速的黑客攻击:以下列方式分离关注点。
这种方法的优点是恕我直言,您可以使用专门的工具对这些数据进行任何形式的统计分析,而不会干扰您的主要开发工作。缩小尺寸是日志文件可能相当冗长。如果这成为一个真正的问题,请使用gzip压缩输出流。