读 CSV/TXT 的报表怎么做分页查询?

 

关键词: 大数据量报表 百万数据报表 大数据量报表导出 大数据量报表打印 大数据量报表慢 大数据报表性能低 CSV 报表分页 CSV 报表分页查询 TXT 报表分页 TXT 报表分页查询 文本报表分页

很容易想到的办法是把文本数据灌到 RDB 里,利用数据库分页机制来做,但这样做会对数据库产生很大影响(容量和性能),毕竟要分页查询的数据量不会太小。而且如果 CSV/TXT 数据就是从数据库导出去的,那这种方式基本就行不通了。

用 JAVA 硬写也是一种办法,就是比较麻烦,除了要能完成过滤、分组等集合运算,还要考虑异步查询的效率,如果通过行号(要遍历数据)确定每页的查询范围,效率就非常低了;通过字节数来确定每页要读的数据会快很多,但要保证每次读取的数据是整条的,如果读出的最后一条数据被截断,要有“补尾”机制,下一页再读的时候又要“去头”,要考虑的问题比较多。

直接用支持文本分页查询的报表工具会比较简单,比如这里介绍的实现过程: 海量清单与分组报表的实现 ,用两行脚本完成创建文件游标和数据过滤,报表基于游标完成异步分页呈现。这里用了两个异步线程,取数线程通过封装好的文本接口返回查询游标将数据分批缓存到本地,呈现线程根据页数计算出行数到本地缓存中去获取数据显示。这里已经解决了翻页效率和去头补尾的问题。

画个图感受一下:
imagepng
②和③分别是两个线程,前者取数线程负责从文本里分批取数缓存,后者呈现线程负责读缓存做报表呈现。

这样做以后,除了报表能异步查询外,还支持导出 Excel 和打印,比较方便。