【问题标题】:Creating and pushing JSON data incrementally to frontend以增量方式创建 JSON 数据并将其推送到前端
【发布时间】:2017-03-19 12:21:42
【问题描述】:

我有一种情况,我需要提取一个公司 32K 多个销售人员的销售记录。并在 UI 中显示他们的总赢额、总管道、总预测类型的销售数据。我正在从 oracle db 读取数据,并创建一个包含 32K 单个项目(每个销售顾问的数据)的 JSON 对象,并通过 REST 端点公开它。创建 json 对象后,它会通过 jquery 调用并显示。但是从 db 读取数据并获取和创建 32K 记录的 json 对象需要相当长的时间(大约 15-20 分钟),并且我的 UI 被阻塞,直到创建该 json 对象。

我的前端包含一个可无限滚动的表格,它在表格上的每个滚动条上提取 200 多条记录。

我已经使用 1000-1500 条记录测试了 WS,它会在 30 秒左右的时间内返回。所以我想创建我的中间层对象,它读取数据并不断更新 json 对象,通过在 json 对象中添加大约 500 个项目并将更新的版本发送到客户端。在可滚动表中增量读取数据的 UI 层无论如何都会逐渐使用数据,并且一次不需要所有 32K 条记录。

有没有一种方法可以实现 json 对象的增量更新,UI 可以增量消费?提前感谢您在这方面的帮助。

读取数据并生成包含项目的数组列表的 java 类如下所示:

public List<FLBDetail> retrieveFLB() throws SQLException, ParseException{
    FLBSqlQueries queryObj=new FLBSqlQueries();
    String query = queryObj.retriveFLBQuery();
    DataRetrieval obj=new DataRetrieval();

    ResultSet rs=obj.executeQuery(query);
    System.out.println(query);
    List<FLBDetail> domainList=new ArrayList<FLBDetail>();
    int i=0;


    while(rs.next()){
        i++;
        FLBDetail domainObj=new FLBDetail();

        domainObj.setRank(i);

        domainObj.setRep(rs.getString(1));
        domainObj.setDirects(rs.getString(2));
        domainObj.setRepOptyNo(applyNoFormat(rs.getString(3)));
        domainObj.setOptyNo(applyNoFormat(rs.getString(4)));
        domainObj.setTotal(applyDoubleFormat(rs.getString(5)));
        domainObj.setForecast(applyDoubleFormat(rs.getString(6)));
        domainObj.setPipeline(applyDoubleFormat(rs.getString(7)));
        domainObj.setUpside(applyDoubleFormat(rs.getString(8)));
        domainObj.setWon(applyDoubleFormat(rs.getString(9)));
        domainObj.setImgUrl(rs.getString(10));


        domainList.add(domainObj);
    }
    return domainList;
}

现在服务端点类通过调用上面的这个方法并使用返回数组将 domainList 数组列表对象转换为 json 数组。

此外,这个 json 对象随后在 $.ajax() 前端调用中被调用,并被绑定到 UI 元素。

如果您需要任何其他信息,请告诉我。

【问题讨论】:

  • 在后端对数据进行分页,实现一个可以从前端获取一页数据的数据存储,如果另一个新的加载请求到达并且你的表,数据存储可以缓存加载的数据并中止先前的加载请求组件可以支持显示不连续的数据集。
  • 如果您分享您的代码,我们可能会为您提供更多帮助。

标签: java jquery json rest jdbc


【解决方案1】:

我解决了一个类似的问题,客户端(GUI)过去常常根据广泛的标准进行广泛的搜索,并且搜索结果有时太大而无法由 GUI 适配器处理。我解决这个问题的方法是创建一个活动的侦听器代理,它在数据网格的每个滚动上都会触发一个带有先前发送记录的最后一个标识符的休息调用,并带来增量增量结果。您需要设置阈值,如果达到阈值,则使用上述协议。但请记住,您不是在进行增量数据库调用,而是对您的服务 API 的其余调用,该 API 已经在内存中拥有数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2011-04-11
    相关资源
    最近更新 更多