2010-07-01 53 views
2

我正在開發一個對具有http接口的數據庫執行廣泛查詢的軟件。因此,我的程序解析並處理以長http://地址形式的查詢。在Java上對服務器執行http查詢的有效方法

我已經意識到整個系統的瓶頸在於查詢,數據傳輸幾乎不超過20KB/s,即使我我正在用千兆連接坐在大學網絡中。最近我的一位朋友提到我可能以無效的方式編寫了我的代碼,這可能是此過程中速度不足的原因。所以我的問題是什麼是從Java中的Web源獲取數據的最快/最有效的方式。

這是我現在所擁有的代碼:

private void handleQuery(String urlQuery,int qNumber, BufferedWriter out){ 
    BufferedReader reader; 
    try{ 
     // IO - routines: read from the webservice and print to a log file 
     reader = new BufferedReader(new InputStreamReader(openURL(urlQuery))); 
     .... 
     } 
    } 

private InputStream openURL(String urlName) 
    throws IOException 
{ 
    URL url = new URL(urlName); 
    URLConnection urlConnection = url.openConnection(); 
    return urlConnection.getInputStream(); 
} 

回答

2

您的代碼對我來說很不錯。代碼片段沒有解釋緩慢的讀取。

可能出現的問題是,

  1. 網絡問題。做一個端到端的網絡測試,以確保網絡速度與您想象的一樣快。
  2. 服務器問題。也許服務器太慢了。
  3. 線程爭用。檢查你是否有任何線程問題。

探查器和網絡跟蹤將指出問題。

+0

嗯,我認爲網絡(至少從我的結尾)是相當穩定的,我的意思是當我做任何其他使用網絡(例如下載文章,圖像,甚至像linux發行版這樣的大文件),我得到幾MB /秒的速度。 我沒有使用線程(是的,這是我知道的災難,但我無法用線程安全有效的方式處理數據,畢竟這是我的第一個大項目) 我越來越傾向於指責遠程服務器的速度,但只是想確保我無法做到加快速度。 – posdef 2010-07-01 12:50:31

1

中沒有任何您提供這應該是一個瓶頸的代碼。問題可能在別的地方;例如讀完這些字符後你正在做什麼,遠程服務器如何寫入,網絡或webproxy問題等。

+0

好孰與字符的情況是: - 解析 - 處理和存儲的數據在一堆物體 我知道這些代碼是不是內存有效的(也就是它很可能有一定的雙副本信息),但我不確定爲什麼查詢速度太慢太 – posdef 2010-07-01 12:57:20

+0

正如@ZZ編碼器建議的那樣,嘗試對客戶端進行分析並查看可以使用系統和網絡監控找到的任何其他證據。你需要有確鑿的證據證明問題出現在服務器端,然後再開始指向它,特別是如果是別人的責任。 – 2010-07-01 14:48:14

+0

一個好的分析器的任何提示?我曾使用「鯊魚」作爲我的課程之一,這是一個非常棒的工具來分析代碼,但它只適用於mac和c/C++代碼,據我所知... – posdef 2010-07-05 11:02:45

相關問題