1

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


}
4

2 回答 2

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();
        }
    }
}
于 2013-02-07T09:22:45.037 回答
0

这是一个快速的技巧:按以下方式分离关注点。

  1. 不要使用 Java 数据结构保留直方图信息。它使您的代码混乱。相反,只需将每次调用的持续时间输出到日志文件,无需预处理。
  2. 使用任何统计应用程序,例如 Excel、R 或 SciPy 来导入数据并生成直方图。例如,按照这些说明在 Excel 中生成直方图。R 有一个内置函数,可以更轻松地绘制直方图。

恕我直言,这种方法的优点是您可以使用专门的工具对此数据进行任何类型的统计分析,而不会干扰您的主要开发工作。缩小是日志文件可能相当长。如果这成为一个真正的问题,请使用 gzipped 输出流。

于 2013-02-07T07:49:26.840 回答