我正在使用GraphStream显示数据库中的数据。 但它创建节点和边缘非常慢。我正在使用this非常基本的例子。
这是我的代码:
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秒。但我需要一次显示更多记录(可能超过100万)。任何人都可以告诉我如何才能提高渲染速度?
答案 0 :(得分:0)
这里只是猜测。您是否尝试过特定时间JDBC从查询返回结果的时间?我从这里开始。如果您发现查询很快就会回来,那么这不是数据库的问题。如果是,您可以考虑使用索引更快地返回结果。
如果查询不是问题,您可以查看图表功能。我的猜测会让我相信渲染很慢,因为图形设置为显示,然后节点和边缘被添加到它,因此它实时渲染。在开始渲染图形之前,可以预加载节点和边缘,从而减少绘制调用的次数。