如何制作性能数字的直方图

时间:2013-02-07 07:06:34

标签: java hashmap histogram concurrenthashmap

我正在尝试衡量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);


}

2 个答案:

答案 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)

这是一个快速的黑客攻击:以下列方式分离关注点。

  1. 不要使用Java数据结构保留直方图信息。它使你的代码变得混乱。相反,只需将每次调用的持续时间输出到日志文件,无需预处理。
  2. 使用任何统计应用程序(如Excel,R或SciPy)导入数据并生成直方图。例如,按照these instructions在Excel中生成直方图。 R具有内置函数,可以更轻松地绘制直方图。
  3. 这种方法的优点是恕我直言,您可以使用专门的工具对这些数据进行任何形式的统计分析,而不会干扰您的主要开发工作。缩小尺寸是日志文件可能相当冗长。如果这成为一个真正的问题,请使用gzip压缩输出流。