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またはOracleSailStoregetConnectionをコールしてOracleSailConnectionまたはOracleSailRepositoryConnectionオブジェクトを作成するたびに、OraclePoolから新しいJDBC接続が取得されます。作成したOracleSailConnectionまたはOracleSailRepositoryConnectionオブジェクトでcloseメソッドを明示的にコールして、これらのJDBC接続がOraclePoolに返されることを確認する必要があります。

データベース・カーソル・リークの回避

いくつかのRDF4J APIコールはイテレータを戻します。Eclipse RDF4J用のアダプタを使用する場合、これらのイテレータの多くには、イテレータの作成時にオープンし、データベース・カーソル・リークを回避するためにクローズする必要がある、基になるJDBC ResultSetがあります。

Oracleのイテレータは、次の2通りの方法でクローズできます。

  1. これらをtry-with-resources文で作成し、Java Autoclosableに依存してイテレータをクローズします。
    
    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"))
      }
    }
  2. イテレータで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バインド値の使用を参照してください。