2017-05-16 72 views
0

所以我有這一塊的耶拿代碼,即衡量一個選擇查詢阿帕奇耶拿查詢執行時間

Timer timer = new Timer(); 
timer.startTimer(); 
Query query = QueryFactory.create(queryString); 
QueryExecution qexec = QueryExecutionFactory.create(query,dataset); 
ResultSet results = qexec.execSelect(); 

long endTime = timer.endTimer(); 

現在的問題是執行時間,這個變量endTime顯示了運行時間的結果是小於查詢執行時間應該是的。 dataset是Jena TDB的位置。

爲了測試這個,我使用Apache Jena的Fuseki在同一個TDB存儲上運行了相同的查詢,並且我發現執行時間不同(可能是實際執行時間)。使用Jena找到執行時間的正確方法是什麼?我不想用Fuseki執行所有的事情並找到答案。

回答

1
QueryExecutionFactory.create(query,dataset); 

這一切確實是創建一個能夠執行查詢的執行,重要的是它執行查詢。

開始執行需要調用的方法execX()這將取決於查詢類型例如一個execSelect()SELECT查詢

執行耶拿是懶惰所以爲了你需要實際枚舉結果的時間執行,執行不完成,直到結果完全如枚舉

ResultSet results = qexec.execSelect(); 
long numResults = ResultSetFormatter.consume(results); 

而在這一點上,你可以停止你的定時器

+0

謝謝@RobV。我意識到我沒有添加execSelect()部分,這是我的代碼。再加上那個問題。但我不知道消費部分。 – N00bsie