GraphStream отрисовывает узлы и рёбра медленно

Я работаю над GraphStream, показывая данные из базы данных. Но он создает узлы и ребра очень медленно. Я использую этот очень простой пример.

Вот мой код:

public class GraphExplore {
    static Connection conn2;
    static String result, result2;
    static JFrame frame;
    static JPanel panel;
    static int totalRows, i;

    public static void main(String args[]) throws SQLException {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    showData();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private static void showData() throws SQLException {

        frame = new JFrame("GRAPH TESTING");

        Graph graph = new SingleGraph("tutorial 1");
        graph.setAutoCreate(true);
        graph.setStrict(false);
        graph.display();

        try {
            Class.forName("org.h2.Driver");
            conn2 = DriverManager.getConnection("jdbc:h2:file:G:/hs_data/h2_db/test", "sa", "sa");

        } catch (Exception e) {
            e.printStackTrace();
        }
        Statement stmt2 = conn2.createStatement();
        ResultSet rs = stmt2.executeQuery("SELECT count(*) FROM cdr");
        while (rs.next()) {
            totalRows = rs.getInt(1);
        }
        ResultSet rs2 = stmt2.executeQuery("SELECT ANUMBER,BNUMBER FROM CDR LIMIT 20");
        while (rs2.next()) {
            result = rs2.getString("ANUMBER");
            result2 = rs2.getString("BNUMBER");
            graph.addNode(result);
            graph.addNode(result2);
            for (i = 0; i < totalRows; i++)
                graph.addEdge("string" + i, result, result2);
        }

        for (Node node : graph) {
            node.addAttribute("ui.label", node.getId());
        }
        // graph.addAttribute("ui.stylesheet", "graph { fill-color: red; }");text-mode:
        // hidden;
        graph.addAttribute("ui.stylesheet", "node {size: 12px;fill-color: #ff0000;z-index: 0;}");
        graph.addAttribute("ui.stylesheet", "edge { shape:line ; fill-color: #222;}");
        conn2.close();
    }

}

Сейчас я использую только 20 строк, и это занимает 3-4 секунды. Но мне нужно показать больше записей (может быть более 1 миллиона) одновременно. Кто-нибудь может подсказать, как можно увеличить скорость рендеринга?

1 ответ

Просто дикое предположение здесь. Вы пробовали синхронизировать время, которое JDBC тратит на возвращение результатов запроса? Я бы начал здесь. Если вы выясните, что запрос возвращается быстро, это не проблема базы данных. Если это так, вы можете рассмотреть возможность использования индексов для более быстрого возврата результатов.

Если запрос не является проблемой, вы можете посмотреть на функциональность графика. Мое предположение заставит меня поверить, что рендеринг медленный, потому что график настроен на отображение, а затем к нему добавляются узлы и ребра, поэтому он рендерится в реальном времени. Может быть возможно предварительно загрузить узлы и ребра до того, как вы начнете рендерить график, уменьшив количество вызовов отрисовки.

Другие вопросы по тегам