2

DBpedia SPARQL エンドポイントに対して一連のクエリを実行しています (ループ内から)。コードは多かれ少なかれ次のようになります。

for (String citySplit : citiesSplit) {
  RepositoryConnection conn = dbpediaEndpoint.getConnection();
  String sparqlQueryLat = " SELECT ?lat ?lon WHERE { "
                        + "<http://dbpedia.org/resource/" + citySplit.trim().replaceAll(" ", "_") + "> <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat . "
                        + "<http://dbpedia.org/resource/" + citySplit.trim().replaceAll(" ", "_") + "> <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?lon ."
                        + "}";
  TupleQuery queryLat = conn.prepareTupleQuery(QueryLanguage.SPARQL, sparqlQueryLat);
  TupleQueryResult resultLat = queryLat.evaluate();
}    

問題は、数回繰り返した後、503 メッセージが表示されることです。

httpclient.wire.header - << "HTTP/1.1 503 Service Temporarily Unavailable[\r][\n]"
(...)
org.openrdf.query.QueryInterruptedException
    at org.openrdf.http.client.HTTPClient.getTupleQueryResult(HTTPClient.java:1041)
    at org.openrdf.http.client.HTTPClient.sendTupleQuery(HTTPClient.java:438)
    at org.openrdf.http.client.HTTPClient.sendTupleQuery(HTTPClient.java:413)
    at org.openrdf.repository.http.HTTPTupleQuery.evaluate(HTTPTupleQuery.java:41)

私の理解が正しければ、この 503 メッセージは DBpedia からのものです。私は正しいですか?成功する連続したクエリの数は可変です。メッセージを取得する前に 13 秒間実行されることもあれば、15 分間実行されることもあります。いずれにせよ、これは正常ではないと思います。何が起こっている可能性がありますか?

4

1 に答える 1

1

DBpedia wikiの Web ページを介した DBpedia データ セットへのアクセスのセクション1.1 には、次のように書かれています。パブリック SPARQL エンドポイントは次のように述べています。

公正使用ポリシー:パブリック DBpedia エンドポイントの制限については、この投稿をお読みください。これらも役に立つかもしれません [sic]: 1 , 2 .

リンクされた投稿には、パブリック DBpedia SPARQL エンドポイントがレート制限を実装していると書かれています。

http://dbpedia.org/sparqlエンドポイントには、次の設定に従って、作成できる接続数/秒のレート制限と、結果セットとクエリ時間の制限の両方があります。

[SPARQL]
ResultSetMaxRows           = 2000
MaxQueryExecutionTime      = 120
MaxQueryCostEstimationTime = 1500

これらは、誰もが dbpedia.org からのデータを逆参照する機会を平等に持つようにするため、および不適切に記述されたクエリ/ロボットから保護するために配置されています。

その限界に達している可能性が高いと思います。

于 2013-06-24T01:24:28.203 に答える