2012-10-08 44 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启动项目时的响应速度。