2011-09-16 10 views
2

私はDBpedia SPARQLエンドポイントに対して(ループ内から)一連の照会を行っています。コードは、多かれ少なかれ、このようになります:私が正しく理解していればDBpediaを照会するときに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の引用元:

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のメッセージを取得する、ということです。私は正しい? 成功を管理する連続したクエリの数は可変です。メッセージを取得する前に13秒間実行されることがあります。時には15分かかることもあります。 いずれにしても、これは正常ではないと私は思います。 何が起こっている可能性がありますか?

答えて

1

DBpediaのウィキのAccessing the DBpedia Data Set over the Webページは、セクション1.1. Public SPARQL Endpointで述べている、と言う:

公正使用ポリシー:公共DBpediaのエンドポイントの制限については、this postをお読みください。これらはまた、役に立つかもしれません。[0120] 12

リンク先のポストによれば、公開DBpedia SPARQLエンドポイントはレート制限を実装しています。

http://dbpedia.org/sparqlエンドポイントは、以下の設定ごとに、あなたが作ることができるコネクション/秒の数に制限率だけでなく、結果セットとクエリ時間に制限の両方があります。

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

これらはです誰もがdbpedia.orgからのデータ参照解除と同等の機会を持ち、ひどく書かれた照会/ロボットを守るための場所です。

この制限を打つ可能性が高いと思います。

関連する問題