約 500k のトリプルを含むかなり小さなグラフがあります。また、stats.opt ファイルを生成し、かなり高速なコンピューター (クアッド コア、16 GB RAM、SSD ドライブ) でコードを実行しました。結果セットを反復処理します。結果セットには約 15000 行あり、反復には 4 秒かかります。これはエンドユーザーには受け入れられません。クエリの実行にはわずか 90 ミリ秒しかかかりません (実際の作業はカーソルの反復によって行われるのでしょうか?)。なぜこれが遅いのですか?結果セットの反復を高速化するにはどうすればよいですか?
クエリは次のとおりです。
SELECT ?apartment ?price ?hasBalcony ?lat ?long ?label ?hasImage ?park ?supermarket ?rooms ?area ?street
WHERE
{ ?apartment dssd:hasBalcony ?hasBalcony .
?apartment wgs84:lat ?lat .
?apartment wgs84:long ?long .
?apartment rdfs:label ?label .
?apartment dssd:hasImage ?hasImage .
?apartment dssd:hasNearby ?hasNearbyPark .
?hasNearbyPark dssd:hasNearbyPark ?park .
?apartment dssd:hasNearby ?hasNearbySupermarket .
?hasNearbySupermarket dssd:hasNearbySupermarket ?supermarket .
?apartment dssd:price ?price .
?apartment dssd:rooms ?rooms .
?apartment dssd:area ?area .
?apartment vcard:hasAddress ?address .
?address vcard:streetAddress ?street
FILTER ( ?hasBalcony = true )
FILTER ( ?price <= 1000.0e0 )
FILTER ( ?price >= 650.0e0 )
FILTER ( ?rooms <= 4.0e0 )
FILTER ( ?rooms >= 3.0e0 )
FILTER ( ?area <= 100.0e0 )
FILTER ( ?area >= 60.0e0 )
}
(これらの bnode を照会するより良い方法はありますか?hasNearbyPark、?hasNearbySupermarket)
そして、クエリを実行するコード:
dataset.begin(ReadWrite.READ);
Model model = dataset.getNamedModel("http://example.com");
QueryExecution queryExecution = QueryExecutionFactory.create(buildQuery(), model);
ResultSet resultSet = queryExecution.execSelect();
while ( resultSet.hasNext() ) {
QuerySolution solution = resultSet.next(); ...