как сделать гистограмму показателей производительности

Я пытаюсь измерить производительность Вставка базы данных . Я записал все эти номера производительности в ConcurrentHashMap . Я пытаюсь сделать гистограмму этих чисел.

В этой параллельной карте хэша это будет нечто подобное. Я цитирую пример. Но на этой карте будет намного больше данных, что означает больше пары ключевых значений.

Key- 11
Value- 2

Таким образом, это означает, что 2 Calls вернулись через 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);


}
1
nl ja de
Это был мой подход. Но этот код просто добавляет много больше, если он подходит для всех диапазонов. Но в будущем предположим, что если этот диапазон был увеличен, тогда мне нужно пойти и добавить еще один, если еще цикл, который я хочу избежать. Именно по этой причине я упомянул о более чистом решении?
добавлено автор AKIWEB, источник
добавлено автор Apurv, источник

2 ответы

Простая гистограмма в 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 data = new HashMap();
        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 data){
        SortedSet keys = new TreeSet(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
добавлено

Вот быстрый взлом: Разделите проблемы следующим образом.

  1. Не храните информацию о гистограмме с использованием структур данных Java. Он загромождает ваш код. Вместо этого просто выведите в файл журнала продолжительность каждого вызова, без предварительной обработки.
  2. Используйте любое статистическое приложение, такое как Excel, R или SciPy, чтобы импортировать данные и создать гистограмму. Например, следуйте этим инструкциям для создания гистограммы в Excel. R имеет встроенную функцию для построения гистограммы в гораздо меньшей степени.

Преимущество такого подхода, ИМХО, заключается в том, что вы можете выполнять любой статистический анализ этих данных с помощью специализированных инструментов, не мешая своим основным усилиям по развитию. Уменьшение - это то, что файл журнала может быть довольно длинным. Используйте поток вывода gzipped, если это становится реальной проблемой.

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async