2012-10-08 73 views
1

在我的Flex Java BlazeDS應用程序中,我通過以下方法從DataBase中獲取數據。從Flex的Flex Java BlazeDS - DataBase Data

  1. 請求的數據通過啓動一個RemoteObject調用Java的
  2. 在Java中執行相應的查詢,得到的結果集,並傳遞結果集,作爲列表回的Flex
  3. 收到的數據的resultHandler遠程對象,將其轉換爲Array Collection並顯示數據。

儘管此過程是BlazeDS DataSerilization的教科書方法,但是當數據包含數百萬條記錄時所花費的時間非常長。請在下面找到一些統計數據。

  • 時間採取從Flex的調用Java:5ms的
  • 建立數據庫連接所需的時間:3000ms採取
  • 的時間來執行查詢:120毫秒
  • 通過ResultSet來iteriate和數據添加到拍攝時間清單:8000MS
  • 到回從Java數據傳遞到Flex的拍攝時間:2000毫秒
  • 時間event.result轉換爲數組集合採取:6000ms

總共採集時間:19125ms(用於MySQL數據庫)以及更多Oracle數據庫用於數據庫中143,000條記錄。

很明顯,問題出在將Java中的ResultSet轉換爲List(必須提示每條記錄)並將Flex中的List轉換爲ArrayCollection時。

有沒有什麼方法或程序可以加快這個過程。

一個可能的過程可能是在Java中避免這些引發並直接將ResultSet傳遞給Flex。那可能嗎???

+2

不要一次加載150000條記錄。改爲使用延遲加載策略。 – RIAstar

+0

我想知道你的代碼是將event.result轉換爲ArrayCollection。我想知道你的Java代碼是如何迭代你的結果集並將數據添加到列表中的。我認爲這20秒記錄很不錯。在我工作的一個應用程序上;它大約需要兩次才能獲得那麼多記錄[並將其呈現在DataGrid中]。在我們的案例中,我們認定這是一個人們可以等待的邊緣案例。 – JeffryHouser

回答

1

考慮使用不同的數據庫技術,例如後端的ORM技術應該更快。我目前正在開發一款應用程序,儘管它不會一次拉出大量記錄,但有很多用戶將記錄集中在一起,我們選擇的ORM技術使我們得到的響應速度明顯快於使用JDBC啓動項目時的響應速度。