Hi,
I have a SPARQL query that took less than a second to get a response from the Virtuoso triple store. However, when sending a second query, the response from Virtuoso became slower. I conducted a test and executed 10 SPARQL queries consecutively. The response for the first query 0 seconds, the second query 1 Seconds, and so on, always the response time is increased for the next query. Executing the queries a lone the response for each query always less than 1 second. :Here are the response times for each query when I execute them consecutively:
0 Seconds
1 Seconds
2 Seconds
2 Seconds
3 Seconds
4 Seconds
4 Seconds
5 Seconds
6 Seconds
6 Seconds
here is my code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class SPARQLQueryExecutor {
public static String executeQuery(String sparqlQuery) throws Exception {
// SPARQL Endpoint and Graph URI
String baseUrl = "http://host:0000/sparql";
String graphUri = "http://graph.org";
String format = "text/ntriples"; // Response format
// Encode query parameters
String encodedGraphUri = URLEncoder.encode(graphUri, StandardCharsets.UTF_8);
String encodedQuery = URLEncoder.encode(sparqlQuery, StandardCharsets.UTF_8);
String serviceURL = String.format("%s?default-graph-uri=%s&query=%s&format=%s",
baseUrl, encodedGraphUri, encodedQuery, format);
// Create connection
URI uri = new URI(serviceURL);
URL url = uri.toURL();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "text/ntriples");
conn.setRequestProperty("Connection", "close"); // Prevent persistent connections
conn.setReadTimeout(10000); // 10 seconds timeout
conn.setConnectTimeout(5000); // 5 seconds connection timeout
// Read response
StringBuilder responseTriples = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
responseTriples.append(line).append("\n");
}
} finally {
conn.disconnect(); // Ensure the connection is closed
}
return responseTriples.toString();
}
}
What am I missing?