如何使用FastFoot轻松搞定JAVA的多任务处理(三)

(一)引言

上一个章节我们讲了如何将FastFoot应用于多表读取,因为很简单想必大多数人都应该明白了,并能应用于实际的工作中,但有的时候会遇到某张表数据比较大(几万,几十万甚至上百万),这样的数据表是不是用不了FastFoot,因为他不是需要建个任务列表么,这只有一个表怎么来建?

(二)分析如何将单个大数据表分解

有些人可能会联想到,如果我把这个表的数据分成块是不是就能用FastFoot进行快速的读取了,回答是肯定的,我们可以这样做。

(三)具体解决方案

做过后台管理系统的同学们都接触过列表页面的检索,在列表页面最常用的技术就是分页,那么我们是不是也可以用分页来实现数据读取任务的分解呢,答案想必不用我说大家也知道了。下面我介绍一下具体的实现过程。

  • 利用PageHelp组件建立分页列表(任务列表)
// 设定分页件数
int step = 1000;
// 取得表数据的总件数
int count = codeMapper.count("DM_BIG_TABLE");
// 计算分页
int pageNum = count % step == 0 ? count / step : count / step + 1;
// 任务分解
List<TablePageRequest> taskList = new ArrayList<>();
for (int i = 1; i <= pageNum ; i++) {
    taskList.add(new TablePageRequest(i, step, tableName));
}
  • TablePageRequest定义如下:
public class TablePageRequest implements Serializable {
    private int page = 0;
    private int limit = 10;
    private String tableName;
}
  • 创建function函数
Function<TablePageRequest,Page<Code>> function = request -> {
    PageHelper.startPage(request.getPage(), request.getLimit(),false);
    return codeMapper.selectAllPage(request.getTableName());
};
  • selectAllPage定义如下:
Page<Code> selectAllPage(@Param("tableName")String tableName);
----------------------------------------------------------------------------------
<select id="selectAllPage" parameterType="java.lang.String" resultType="BaseResultMap">
  select * from ${tableName}
</select>
  • 最后就可以通过FastFoot执行了
Map<TablePageRequest,Page<Code>> map = FastFoot.runTasks(taskList, function);

(四)结论

如果单表数据越大,使用FastFoot的优越性越明显,同时可以通过调整step和feet来测试哪种组合是最优的。

猜你喜欢

转载自blog.csdn.net/qq_35210225/article/details/106629375