Tôi đã thử ví dụ được đưa ra here sau một số sửa đổi nhỏ - chủ yếu là tôi đã thêm mệnh đề where mà không khớp - cho mục đích thử nghiệm.Neo4j cypher query slow performance
Trên hệ thống của tôi (1.9.M04 - java 6u43 - ubuntu 12.04 - AMD Phenom II 1090T -X6) truy vấn đơn giản
Chỉ với 1 nút trong cơ sở dữ liệu (cũng nhúng) mất 262 mili giây. Rõ ràng là có điều gì đó không ổn. Điều gì có thể là vấn đề ?
Cảm ơn
public void test()
{
GraphDatabaseService db = g = new GraphDatabaseFactory().newEmbeddedDatabase("./neo4j1test");
long id;
Transaction tx = db.beginTx();
try
{
Node refNode = db.createNode();
id = refNode.getId();
refNode.setProperty("name", "reference node");
tx.success();
}
finally
{
tx.finish();
}
ExecutionEngine engine = new ExecutionEngine(db);
ExecutionResult result = engine.execute("start n=node("+id+") where (n.name = \"reference node\") return n.name");
long time = System.currentTimeMillis();
result = engine.execute("start n=node("+id+") where (n.name = \"reference node\") return n.name");
time = (System.currentTimeMillis() - time);
System.out.println("Time taken : " + time + " ms.");
}
Có lẽ nó chỉ là chi phí neo4j bootstrapping, bạn nên cố gắng lặp lại các truy vấn nhiều lần, trong trường hợp đó tôi nghĩ rằng thời gian thực hiện nên thấp hơn đáng kể . – remigio
trước tiên hãy thử làm ấm bộ đệm. chạy lệnh này vài lần: 'start n = node (*) return count (n); bắt đầu r = rel (*) return count (r)'. thứ hai, bạn đo thời gian như thế nào? nó là thời gian được đưa ra bởi đầu ra cypher hay đơn giản là thời gian trước và sau dòng mã cụ thể? trong trường hợp thứ hai độ trễ có thể nằm giữa ứng dụng của bạn và máy chủ – ulkas
Ok đây là cách hoạt động của nó - Tôi đã đo thời gian thực hiện truy vấn thứ hai (dự kiến thực thi đầu tiên sẽ khởi tạo bộ nhớ đệm nội bộ, v.v.). Nhưng ở đây nó khác. nó là lần thực hiện thứ ba trở đi, phải mất ít thời gian hơn đáng kể. Tôi không nhận được những gì là đặc biệt về thực hiện 3 cho cùng một truy vấn. remigio cảm ơn cho tip, ulkas, tôi đang sử dụng nó trong chế độ nhúng – Shilu