8.11 Oracle RDF Graph Adapter for Eclipse RDF4Jのベスト・プラクティス
この項では、Oracle RDF Graph Adapter for Eclipse RDF4Jのパフォーマンスのベスト・プラクティスについて説明します。
リソースのクローズ
アプリケーション・プログラマは、リソース・リークを避けるように注意する必要があります。Oracle RDF Graph Adapter for Eclipse RDF4Jで回避すべき2つの最も重要なタイプのリソース・リークは、JDBC接続リークとデータベース・カーソル・リークです。
JDBC接続リークの回避
OracleRepository
またはOracleSailStore
でgetConnection
をコールしてOracleSailConnection
またはOracleSailRepositoryConnection
オブジェクトを作成するたびに、OraclePoolから新しいJDBC接続が取得されます。作成したOracleSailConnection
またはOracleSailRepositoryConnection
オブジェクトでclose
メソッドを明示的にコールして、これらのJDBC接続がOraclePoolに返されることを確認する必要があります。
データベース・カーソル・リークの回避
いくつかのRDF4J APIコールはイテレータを戻します。Eclipse RDF4J用のアダプタを使用する場合、これらのイテレータの多くには、イテレータの作成時にオープンし、データベース・カーソル・リークを回避するためにクローズする必要がある、基になるJDBC ResultSetがあります。
Oracleのイテレータは、次の2通りの方法でクローズできます。
- これらを
try-with-resources
文で作成し、JavaAutoclosable
に依存してイテレータをクローズします。String queryString = "PREFIX ex: <http://example.org/ontology/>\n"+ "SELECT * WHERE {?x ex:name ?y}\n" + "ORDER BY ASC(STR(?y)) LIMIT 1 "; TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString); try (TupleQueryResult result = tupleQuery.evaluate()) { while (result.hasNext()) { BindingSet bindingSet = result.next(); System.out.println("value of x: " + bindingSet.getValue("x")); System.out..println("value of y: " + bindingSet.getValue("y")) } }
- イテレータで
close
メソッドを明示的にコールします。String queryString = "PREFIX ex: <http://example.org/ontology/>\n"+ "SELECT * WHERE {?x ex:name ?y}\n" + "ORDER BY ASC(STR(?y)) LIMIT 1 "; TupleQuery tupleQuery = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryString); TupleQueryResult result = tupleQuery.evaluate(); try { while (result.hasNext()) { BindingSet bindingSet = result.next(); System.out.println("value of x: " + bindingSet.getValue("x")); System.out..println("value of y: " + bindingSet.getValue("y")) } } finally { result.close(); }
統計の収集
大量のRDFデータをデータベースにロードした後、推論を実行する前に、アプリケーション表、RDFグラフ、および存在する場合は、それを分析することをお薦めします。分析操作を実行することで統計情報が収集され、問合せの応答時にOracleオプティマイザが効率的な実行計画を選択しやすくなります。
関連する統計を収集するには、OracleSailConnection
で、次のメソッドを使用します。
OracleSailConnection.analyze
OracleSailConnection.analyzeApplicationTable
パラメータを含むこれらのメソッドの詳細は、RDF Graph Support for Eclipse RDF4JのJavadocを参照してください。
JDBCバインド値
定数値のみが異なる一連のSPARQLクエリを実行する場合は、常に、JDBCバインド値を使用することをお薦めします。バインド値を使用すると、大量の問合せコンパイル・オーバーヘッドが節約され、問合せワークロードのスループットが大幅に向上します。
JDBCバインド値の詳細は、JDBCバインド値の使用および例13: JDBCバインド値の使用を参照してください。