秒级展现的百万级大清单报表怎么做

介绍润乾报表处理大数据量清单报表的优化方案,采用异步线程及集文件存储,实现秒级查询,解决传统分页机制下的效率和数据一致性问题。

数据查询业务中,有时会碰到数据量很大的清单报表。由于用户输入的查询条件可能很宽泛,因此会从数据库中查出几百上千万甚至过亿行的记录,常见的包括银行流水记录,物流明细等。呈现时如果等着把这些记录全部检索出来再生成报表,那会需要很长时间,用户体验自然会非常恶劣。而且,报表一般采用内存运算机制,大多数情况下内存里也装不下这么多数据。所以,我们一般都会使用分页呈现的方式,尽量快速地呈现出第一页,然后用户可以随意翻页显示,每次只显示一页,也不会造成内存溢出。

传统分页呈现的实现,一般都会使用数据库的分页机制来做,利用数据库提供的返回指定行号范围内记录的语法。界面端根据当前页号计算出行号范围(每页显示固定行数)作为参数拼入 SQL 中,数据库就会只返回当前页的记录,从而实现分页呈现的效果。

不过,这样做会有两个问题:

1. 翻页时效率较差

用这种办法呈现第一页一般都会比较快,但向后翻页时,所使用的取数 SQL 会被再次执行,并且将前面页涉及的记录跳过。对于有些没有 OFFSET 关键字的数据库,就只能由界面端自行跳过这些数据(取出后丢弃),而像 ORACLE 还需要用子查询产生一个序号才能再用序号做过滤。这些动作都会降低效率,浪费时间,前几页还感觉不明显,但如果页号比较大时,翻页就会有等待感了。

2. 可能出现数据不一致

用这种办法翻页,每次按页取数时都需要独立地发出 SQL。这样,如果在两页取数之间又有了插入、删除动作,那么取的数反映的是最新的数据情况,很可能和原来的页号匹配不上。例如,每页 20 行,在第 1 页取出后,用户还没有翻第 2 页前,第 1 页包含的 20 行记录中被删除了 1 行,那么用户翻页时取出的第 2 页的第 1 行实际上是删除操作前的第 22 行记录,而原来的第 21 行实际上落到第 1 页去了,如果要看,还要翻回第 1 页才能看到。如果还要基于取出的数据做汇总统计,那就会出现错误、不一致的结果。

为了克服这两个问题,有时候我们还会用另一种方法,用 SQL 游标从数据库中取数,在取出一页呈现后,但并不终止这个游标,在翻下一页的时候再继续取数。这种方法能有效地克服上述两个问题,翻页效率较高,而且不会发生不一致的情况。不过,绝大多数的数据库游标只能单向从前往后取数,表现在界面上就只能向后翻页了,这一点很难向业务用户交代,所以很少用这种办法。

当然,我们也可以结合这两种办法,向后翻页时用游标,一旦需要向前翻页,就重新执行取数 SQL。这样会比每次分页都重新取数的体验好一些,但并没有在根本上解决问题。

润乾报表方案

下面介绍的润乾报表方案,提供的大报表功能可以支持海量清单报表的秒级查询。在这个方案中,取数和呈现采用两个异步线程,取数线程发出 SQL 后不断取出数据缓存到本地,由呈现线程从本地缓存中获取数据进行显示。这样,已经取出并缓存的数据就能快速呈现,不再有等待感;而取数线程所涉及的 SQL,在数据库中保持同一个事务,也不会有不一致的问题,前面提到的两个问题全部得以完美解决。

同时,借助集文件存储格式,报表还可以按行号随机访问记录,而不用每次通过遍历查找数据。也就是说,这种存储格式支持跳转到任意页访问,从而极大地改善了用户体验。不过,由于采用了异步机制,页面端显示的总页数和总记录数会随着取数过程不断变化。

大清单报表运行原理:

需要注意的是,大清单报表中用到的异步机制和集文件存储都是在集算器的基础上实现的,因此该功能需要“集成集算器”功能支持,并不包含在润乾报表基础版中。

下面通过举例来说明润乾海量大清单报表(以下简称:大报表)的开发使用过程。

SQL 源大报表

首先来看一种最基础的大报表,即报表数据来源于数据库的情况。例子中我们需要根据日期范围查询订单表的交易信息,由于数据规模较大,因此需要使用大清单报表呈现。

制作报表模板

与普通报表开发一样,设置参数、准备数据集、绘制报表模板。

报表参数为查询日期起止:

数据集根据参数查询订单表 SQL:

报表模板:

设置大数据集

与普通报表不同,需要在润乾报表属性(报表 - 报表属性)中设置“大数据集名称”,指向数据集 ds1,直接利用 SQL 完成异步取数。

设置完成后,在报表设计器 IDE 中即可浏览报表:

发布到 WEB

与普通报表发布类似,大清单报表也通过 JSP 以 tag-lib 的方式发布。

<report:big name="report1" reportFileName="<%=report%>"

 needScroll="<%=scroll%>"

 params="<%=param.toString()%>"

 exceptionPage="/reportJsp/myError2.jsp"

 scrollWidth="100%"

 scrollHeight="100%"

 rowNumPerPage="20"

 fetchSize="1000"

 needImportEasyui="no"

 />
<report:big name="report1" reportFileName="<%=report%>"

 needScroll="<%=scroll%>"

 params="<%=param.toString()%>"

 exceptionPage="/reportJsp/myError2.jsp"

 scrollWidth="100%"

 scrollHeight="100%"

 rowNumPerPage="20"

 fetchSize="1000"

 needImportEasyui="no"

 />
复制代码

其中 rowNumPerPage 属性为每页显示记录数;fetchSize 为每次从数据源读取的数据量。完整发布的 JSP 可以参考报表安装目录下的样例文件:[report\web\webapps\demo\reportJsp\ showBigReport.jsp]。

WEB 端呈现效果:

可以注意到,右上角的页码和总记录条数随着异步线程不断读取数据而不断变化。

除了展现,在润乾报表中还支持对大清单报表导出 Excel 和打印。

导出

打印

非 SQL 源大报表

当海量数据来源非 RDB 时,由于无法利用数据库分页,因此无法通过 SQL 实现异步大报表。针对这一问题,润乾报表的大报表方案中,采用了两阶段异步线程,其中由集算器定义取数线程负责从非 RDB 数据源取数并缓存数据,再由呈现线程负责读取缓存并分页展现。

下面以文件数据为例,说明非 RDB 数据源的大报表开发过程。例子中的卫星数据以文件(CSV)方式存储,数据规模较大,是典型的非 RDB 数据源。现在我们要按照日期查询某日风速、温度等明细信息。

报表数据准备

首先,我们借助润乾报表的集算器数据集读取文件数据,并为报表返回游标。集算器 SPL 脚本如下:


A

1

=file(“source.csv”).cursor@t(;,",")

2

=A1.select(时间 == d_time)

3

return A2

A1 建立文件游标;

A2 在游标执行时对数据进行过滤(此时游标尚未执行,数据并未取出);

A3 返回游标过滤结果,为报表提供数据。

将 SPL 脚本存储为 bigReport-file.dfx,并在报表中作为数据集引入:

设计报表模板

接下来,我们根据所准备的数据制作报表模板:

同时设置大数据集:

发布到 WEB

然后,将做好的报表发布到 WEB 端:

是不是很简单? 这个例子显示了在开发报表时如果涉及海量非 RDB 数据,润乾报表可以借助集算器对多种数据源类型的支持能力,实现大报表开发与呈现。

使用大报表注意事项

上面介绍了开发大报表该有的正确姿势,但任何功能都不是万能的,使用大报表也有需要注意的地方:

1、不排序

大报表的数据集都比较大,如果在意响应时间(谁会不在意呢),那么应该尽量不对数据集进行全表排序(注意我说的是全表排序),毕竟,等排完序再呈现,时间已经过去很久了……

2、不适合高并发场景

大报表采用异步机制,将数据分批加载到内存再交给前端呈现,减少了内存占用,但同时增加了 CPU 和磁盘 I/O 负载,并发高时 CPU 和硬盘可能成为瓶颈从而影响呈现效果,因此大报表不适合高并发的场景。

本文主要介绍了 RDB 和非 RDB 数据源情况下大清单报表的开发方法,在下一篇《百万级分组大报表开发与呈现》中,我们将进一步介绍带有汇总值的大报表和分组大报表的实现过程。


转载于:https://juejin.im/post/5ba48f656fb9a05d0f16d91e

<br>Adobe Photoshop CS2 Classroom in a Book <br><br>By Adobe Creative Team <br> <br>Publisher: Adobe Press <br>Pub Date: May 24, 2005 <br>ISBN: 0-321-32184-7 <br>Pages: 496 <br> <br>Photoshop is one of those programs that's so cool you just want to dive right in and start creatingbut by plunging in head-first, without any guidance, you're likely to miss a lot. There's a solution: With this book, you learn by doing, getting your feet wet immediately as you progress through a series of hands-on projects that build on your growing Photoshop knowledge. Simple step-by-step instructions, review questions at the end of each chapter, and a companion CD with all of the book's project files make learning a breeze as the Adobe Creative Team takes you on a self-paced tour of the image-editing powerhouse. This bestselling guide has been completely revised to cover all of Photoshop CS2's new features, which include advanced tools for digital photographers, such as a new Spot Healing Brush for correcting scratches or blemishes, and Smart Sharpen for fixing photo blurring. Photoshop CS2 also includes loads of new creative tools, such as Vanishing Point and Image Warp. This comprehensive guide starts with an introductory tour of the software and then progresses on through lessons on everything from Photoshop's interface to more complex topics like color management, Web graphics, and photo retouching. <br><br><br><br>本书由Adobe公司的专家编写,是Adobe Photoshop CS2软件的正规学习用书。.<br>全书共分为16课,每课都围绕着具体的例子讲解,步骤详细、重点明确,手把手教你进行实际操作。全书是一个有机的整体,覆盖了Adobe Photoshop的绝部分基础知识,如照片的校正、修饰和修复、选区的建立、图层、蒙版和通道的使用、文字设计、矢量的绘制、图像的合成、在图像中创建链接、创建翻转效果和动画,以及生成和打印一致的颜色等。书中给出了量的提示和技巧,让您在使用Adobe Photoshop CS2的过程中效率更高。..<br>本书可以从头到尾阅读,也可以选择阅读感兴趣的内容。全书语言通俗易懂并配以量的图示,特别适合Photoshop新手阅读,有一定使用经验的用户从中也可学到量的高功能和Photoshop CS2新增的功能。本书也适合各类相关培训班学员及广自学人员参考。... <br><br>http://www.china-pub.com/748013<br><br><br><br>http://ecx.images-amazon.com/images/I/51SHXz1CSNL._SS500_.jpg<br><br><br>http://www.amazon.com/Adobe-Photoshop-CS2-Classroom-Book/dp/0321321847<br><br><br><br>
用户画像作为大数据的根基,它抽象出一个用户的信息全貌,为进一步精准、快速地分析用户行为习惯、消费习惯等重要信息,提供了足够的数据基础,奠定了大数据时代的基石。 用户画像,即用户信息标签化,就是企业通过收集与分析消费者社会属性、生活习惯、消费行为等主要信息的数据之后,抽象出一个用户的商业全貌作是企业应用大数据技术的基本方式。用户画像为企业提供了足够的信息基础,能够帮助企业快速找到精准用户群体以及用户需求等更为广泛的反馈信息。 用户画像系统能很好地帮助企业分析用户的行为与消费习惯,可以预测商品的发展的趋势,提高产品质量,同时提高用户满意度。构建一个用户画像,包括数据源端数据收集、数据预处理、行为建模、构建用户画像。有些标签是可以直接获取到的,有些标签需要通过数据挖掘分析到!本套课程会带着你一步一步的实现用户画像案例,掌握了本套课程内容,可以让你感受到Flink+ClickHouse技术架构的强大数据应用的广泛性。 在这个数据爆发的时代,像型电商的数据量达到百亿别,我们往往无法对海量的明细数据做进一步层次的预聚合,量的业务数据都是好几亿数据关联,并且我们需要聚合结果能在返回。 包括我们的画像数据,也是有这方便的需求,那怎么才能达到返回呢?ClickHouse正好满足我们的需求,它是非常的强的。 本课程采用Flink+ClickHouse技术架构实现我们的画像系统,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。希望本课程对一些企业开发人员和对新技术栈有兴趣的伙伴有所帮助,如对我录制的教程内容有建议请及时交流。项目中采用到的算法包含Logistic Regression、Kmeans、TF-IDF等,Flink暂时支持的算法比较少,对于以上算法,本课程将带家用Flink实现,并且结合真实场景,学完即用。系统包含所有终端的数据(移动端、PC端、小程序端),支持亿数据量的分析和查询,并且是实时和近实时的对用户进行画像计算。本课程包含的画像指标包含:概况趋势,基础属性,行为特征,兴趣爱好,风险特征,消费特征,营销敏感度,用户标签信息,用户群里,商品关键字等几指标模块,每个指标都会带家实现。课程所涵盖的知识点包括:开发工具为:IDEA FlinkClickhouseHadoopHbaseKafkaCanalbinlogSpringBootSpringCloudHDFSVue.jsNode.jsElemntUIEcharts等等 课程亮点: 1.企业实战、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.提供原始日志数据进行效果检测 4.Flink join企业实战演练 5.第四代计算引擎Flink+ClickHouse技术架构6.微服务架构技术SpringBoot+SpringCloud技术架构7.算法处理包含Logistic Regression、Kmeans、TF-IDF等8.数据库实时同步落地方案实操9.统计终端的数据(移动端、PC端、小程序端) 10.支撑亿海量数据的用户画像平台11.实时和近实时的对用户进行画像计算12.后端+大数据技术栈+前端可视化13.提供技术落地指导支持 14.课程凝聚讲师多年实战经验,经验直接复制15.掌握全部内容能独立进行大数据用户平台的设计和实操企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值