【问题标题】:Flex Java BlazeDS - DataBase DataFlex Java BlazeDS - 数据库数据
【发布时间】:2012-10-08 11:36:36
【问题描述】:

在我的 Flex Java BlazeDS 应用程序中,我通过以下方法从数据库中获取数据。

  1. 通过启动对 Java 的 RemoteObject 调用从 Flex 请求数据
  2. 在 Java 中执行相应的查询,获取结果集并将结果集作为列表传递回 Flex
  3. 在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


【解决方案1】:

考虑使用不同的数据库技术,例如后端的 ORM 技术应该更快。我目前正在开发一个应用程序,它虽然不会一次提取大量记录,但有很多用户一次提取记录,与我们使用 JDBC 启动项目时相比,我们选择的 ORM 技术为我们提供了明显更快的响应。

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多