现在是:
jsp --> action --> service --> 查询本地硬盘文件
文件是文本,里面放着一条条数据
数据条数不定,可能从几百条到100w条。
需要将这几百条到100w条的数据读取后显示在jsp上,并支持缩放功能。由于100w级别这样的数据,用一页是显示不完的,所以决定一页最多显示1000条,也就是从这100w条中抽取。
在页面上显示用的是Highcharts,将这1000条数据的行号和值传给jsp,然后用Highcharts画出曲线。
那么问题就是,抽取这100w条数据怎么抽取。
我现在的做法是:
先计算出要抽取那些行,存入list。然后一行一行读,读到哪一行是属于list的,就将这行数据存入一个list。
最后把100w行读完了,要显示的行数就存完了,返回到页面上去。
抽取的方案是:比如100w条数据,只显示1000条在页面上的话,就是取一条后跳1000条再取,这样一共取1000条。缩放时也是一样,比如要查看20w到50w之间的数据,就计算跳多少条,然后取1000条出来。
由于要支持缩放,那么每次缩放,就要重新计算读取哪1000行数据,然后同样又读取那个文本数据的100w行数据,筛选出要返回的行数据。
这样的话,100w行的数据,缩放一下要等个几秒钟才能显示出来。
第一次加载用几秒钟可以接受,可是缩放想做得更快,不知有何良策?
如果每行的长度都相等的话,可以考虑使用类:
RandomAccessFile
http://stackoverflow.com/questions/18933234/jump-to-specific-line-in-txt-file-where-all-lines-are-of-equal-length-in-java
如果是结构化数据的话,感觉放到数据库,为每行加一个索引的行号,效率是相当高的(最好在写文件的时候直接到数据库).
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。