2012-03-21 63 views
1

我正在生成大小約爲250MB的字節數組。然後使用Java應用程序中的標準JDBC代碼將其插入到遠程Microsoft SQL Server中的表中。無法將250MB字節數組插入到遠程SQL Server上

我的第一個設置 - 在一個Amazon EC2實例上運行的應用程序,運行在單獨的Amazon EC2實例上的Microsoft SQL Server。在這種情況下,INSERT語句有效 - 通過

我的第二個設置 - 在我的筆記本電腦上本地運行的應用程序,託管在Amazon EC2實例上的數據庫。這裏的連接是正確的,但在線上
pstmt.executeQuery(1,byteArray);
即使在說了半個小時之後程序仍然運行而不終止 - 失敗

要檢查,我居然能夠從我的本地機器上訪問和數據插入到遠程數據庫,我寫了一個簡單的應用程序中插入一個整數到表 -

我懷疑由於我沒有真正快速的互聯網連接,我的數據上傳失敗。無論如何加快從JDBC到遠程SQL Server數據庫的數據傳輸。

我曾考慮增加SQL Server上的數據包大小 - 但我不確定這是否正確,因爲它在使用另一個Amazon EC2實例運行相同的應用程序時起作用 - 僅在從本地應用程序的實例。爲團隊中的每個開發人員運行Amazon EC2實例都是一個昂貴的建議。

+0

如果您正在遠程上傳大塊數據,我肯定會考慮分塊上傳並使其可恢復......期待您的會話​​持續不間斷很長一段時間,凌亂的互聯網連接是樂觀的 – 2012-03-23 05:13:25

回答

0

您的問題是網絡延遲,而不是數據庫本身。

想一想如何優化將文件傳輸到EC2實例。以同步方式發送一個250MB文件永遠不是一個好方法。這總是會導致問題。上傳文件並將其插入數據庫是兩件不同的事情。不要混合使用它們,

件事你應該做的:

  1. 壓縮文件就像你可以,然後將其發送。AND
  2. 使用ftp或http(雖然性能相同)並將文件上傳到服務器。然後在服務器上用該文件做任何你想做的事情。 (喜歡它插入到數據庫)

OR

  1. 傳輸大文件在網絡上是其他超級真棒方式:分割成塊的文件(壓縮之後),異步發送他們(例如:在python中的twister或java中的nio)並最終合併服務器端的所有文件(使用校驗和來驗證文件的完整性)。
1

首先想到這裏。我不建議嘗試通過遠程連接直接將大量數據推送到SQL Server中。一個快速的建議。

是否有可能將250MB陣列(我懷疑它的文件/圖像/視頻/某些備份)作爲文件(普通文件上傳..ajax或普通POST)上載到遠程Amazon Instance文件系統上,然後在同一臺機器上運行守護進程,然後在本地磁盤上拾取文件並將其推入SQL實例。

優點。

  1. 文件上傳肯定會更快。
  2. 不依賴於JDBC適配器來保持活動並可靠地上載文件。

我會試着回來一個更適合您的直接方法的更好的解決方案。

+0

您可以看看用於SQL Server的備用JDBC驅動程序。微軟提供的驅動程序絕對不是最好的選擇。看看這裏http://stackoverflow.com/questions/6943553/list-of-jdbc-drivers-for-sql-server-2008-comparison – 2012-03-21 06:40:02

+0

這是一個很好的建議 - 將嘗試一下。儘管有多個開發人員訪問數據庫,但這可能是一個開銷。 – Suchintya 2012-03-22 06:31:45