【发布时间】:2012-10-08 11:36:36
【问题描述】:
在我的 Flex Java BlazeDS 应用程序中,我通过以下方法从数据库中获取数据。
- 通过启动对 Java 的 RemoteObject 调用从 Flex 请求数据
- 在 Java 中执行相应的查询,获取结果集并将结果集作为列表传递回 Flex
- 在Remote Object的resultHandler中接收数据,转换成Array Collection并展示数据。
虽然此过程是 BlazeDS DataSerilization 的教科书方法,但当数据包含数百万条记录时,所花费的时间非常巨大。请在下面找到一些统计数据。
- 从 Flex 调用 Java 所用时间:5 毫秒
- 建立数据库连接所用时间:3000ms
- 执行查询所用时间:120ms
- 遍历结果集并将数据添加到列表所需的时间:8000 毫秒
- 将数据从 Java 传回 Flex 所需的时间:2000 毫秒
- 将 event.result 转换为数组集合所需的时间:6000 毫秒
总耗时:19125 毫秒(对于 MySQL 数据库),对于 Oracle 数据库,数据库中有 143,000 条记录需要更多时间。
很明显,问题在于在 Java 中将 ResultSet 转换为 List(必须迭代每条记录)以及在 Flex 中将 List 转换为 ArrayCollection。
有什么方法或程序可以加快这个过程。
一个可能的过程可能是在 Java 中避免这些迭代,并直接将 ResultSet 传递给 Flex。这可能吗???
【问题讨论】:
-
不要一次加载 150000 条记录。请改用延迟加载策略。
-
我想知道您将 event.result 转换为 ArrayCollection 的代码是什么。我想知道您的 Java 代码是什么来遍历您的结果集并将数据添加到列表中。我认为这么多记录的 20 秒是相当不错的。在我开发过的一款应用上;获得这么多记录[并将其呈现在 DataGrid 中] 大约需要两倍的时间。在我们的案例中,我们认为这是一个边缘案例,人们可以等待。
标签: java apache-flex