逐步创建JSON数据并将其推送到前端

时间:2017-03-19 12:21:43

标签: java jquery json rest jdbc

我有一种情况需要提取公司32,000多名销售人员的销售记录。在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元素。

如果您需要任何其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

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