1

のパフォーマンスを測定しようとしていますDatabase Insert。これらすべてのパフォーマンス数値をConcurrentHashMap. これらの数値のヒストグラムを作成しようとしています。

その同時ハッシュマップでは、このようなものになります。例を引用しています。しかし、そのマップにはより多くのデータがあり、より多くのキーと値のペアを意味します。

Key- 11
Value- 2

つまり、11 ミリ秒で 2 つのコールが返ってきました。以下の別の例

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 には、手間をかけずにヒストグラムをプロットするための組み込み関数があります。

このアプローチの利点は、私見ですが、主な開発作業を妨げることなく、専用のツールを使用してこのデータに対してあらゆる種類の統計分析を実行できることです。サイズが小さくなると、ログ ファイルがかなり長くなる可能性があります。これが実際の問題になる場合は、gzip された出力ストリームを使用してください。

于 2013-02-07T07:49:26.840 に答える