【发布时间】: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