技术报表功能有

核心提示经常被报表折磨的人一定听过这样一句话:“新人不识愁滋味,爱接需求,爱接需求,为做报表晕转头,一张能做一个周。“作为一个做了十几年数据的报表开发人,回想自己刚到公司的时候,公司数据系统什么都没有,连提取数据都很困难,做报表就更不要想了,每次都

经常被陈述折磨的人一定听过这样一句话:“新人不知愁滋味,爱满足诉求,为陈述而头晕,一个能坚持一周。”

作为一个做了十几年数据的报表开发人员,回想刚到公司的时候,公司的数据系统里什么都没有,连提取数据都困难,更别说做报表了。每次都是东拼西凑,做一些简单的图表就是一份报告。

更多的时候,业务方拿出一堆纸放在我们面前:“就这么办。”顿时,我的头就晕了。两三天随便选一个都是家常便饭,我这种运气不好折腾一周的也不少见。

后来公司的数据仓库慢慢成型,我也慢慢走出了用Excel做报表的低级阶段,但新的问题也随之而来:

整个运营部门,只有我这个主持人负责全公司的报表数据。每隔一段时间,数据平台就会停止运行,数据系统停止运行就会丢失数据。最惨的就是天天担惊受怕,更别说损失严重了。

举个简单的例子,我们之前用了一个国内厂商的举报平台,业务不多的时候表现正常。一旦到了业务高峰期,根本就切换不了窗口。我们当时就想把资源切换到另一台服务器上,但是发现无论怎么操作都没有办法切换资源。领导们听说这事来了,围在一起商量怎么解决。同时,厂家技术支持立即赶到现场灭火。后来我们终于发现了问题:报表系统在读取数据库的日志时,数据量过大,直接导致系统堵塞,导致业务系统宕机,无法处理业务请求。

我们处理完故障后,看看时间。这个时间过去了一个小时,相关外联单位的电话一直响个不停,耽误了业务系统的处理,大家都走不开。

这也说明,我们在为企业选择报表工具时,不仅要关注报表工具的灵活性、功能性和性价比,更重要的是要关注其功能性和技术性,比如是否存在技术瓶颈、是否有预览缓存、是否有集群缓存机制、是否会频繁宕机等。,这些都是一般商务人士找不到的东西。

根据我们近几年的经验,国外的工具如JasterReport和BIRT基本上不需要考虑。对于国内厂商来说,FineReport等一些工具在技术上已经比较成熟。基本上报表平台的稳定性都很强,基本没有宕机。

我将结合报表平台FineReport和自己的经验,总结以下五项硬技术,简单梳理一个优秀的报表工具应该具备怎样的“精良”技术:

一.网络集群

什么是集群?简单来说,有一家银行只开了一个业务办理窗口,但是来办理业务的人有100个,所以排了很长的队。突然,这个窗口的银行柜员忙得晕过去,于是窗口上挂了“暂停服务”的牌子,整个队列都要等窗口重新开放。

如果你是总统,你会怎么做?你肯定会说,这个不简单,多开几个窗口一起处理就行了。

没错!这就是集群,报表服务器相当于银行的窗口。以前我们把所有的工程负载都集中在一台主机上,也就是只有一个窗口,但是一旦数据达到阈值,就会出现宕机。此时,整个系统会出现故障并停止运行。这时,我们需要集群来增加服务器节点,以实现并发线性增长:

这也是解决停机的常用方法。FineReport在这方面做的很完美,可以根据算法把需求合理的分配到各个节点。任何节点宕机都不会影响系统的正常工作,即“无主机模式”。

后来我发现FineReport有非常成熟的集群架构。我总结为“负载均衡+web容器+状态服务器+文件服务器+外部数据库”,几乎可以成为国内报表集群方案的标准模板!

负载均衡就是合理分流,速度快的节点多,速度慢的节点少,这也是集群系统的入口。web容器相当于银行柜台,功能是处理客户端的请求;当有请求时,需要进行验证和缓存,状态服务器用于管理服务器缓存。服务器相当于银行前台的电脑,保证了各个窗口的信息同步更新,即资源文件的实时一致性;最后,虽然服务器节点很多,但是需要使用同一个外部数据库,这样才能保证节点之前的配置信息相同;

第二,迅捷的引擎

报表开发人员知道,我们所有的报表日志和文件都需要写入数据库,然后在需要数据时从数据库中提取出来。然而,许多报告工具在访问日志方面效率低下,一旦日志过大,系统就会太慢甚至停机。

FineReport独立开发了一个很棒的引擎——Swift Engine,其实就是一个分布式数据库。我们可以理解为公共账本。你可以在这个账本上写数据,我也可以写数据。我可以读取记录的数据,并获得我自己的单独数据。

但是这个公众号能允许记录多少数据呢?在调查期间你必须排队等候吗?会不会因为数据太多而崩溃?当我想看数据的时候会影响到别人吗?

这就是swift引擎真正强大的地方。我一直在担心以上问题,没想到雨燕引擎全部解决了!

首先,swift没有使用cube导入数据进行查询的方式,而是改变了一套数据结构。只要插入了数据,就可以零延迟地进行查询,根本不需要排队。

而且理论上支持数据的无限增长,只要不超过单机的物理瓶颈,就可以放心的把数据放在这里;

最后,swift engine支持非对称分发,服务之间分工明确,互不干扰。比如导入机和查询机分开,避免导入数据时资源过多影响查询。

3.基于JVMTI的增强型内存管理技术

虽然这个技术听起来很深奥,但是我发现这是提高报表平台稳定性的最好方法!

许多其他工具是如何防止停机的?方法比较简单,就是一旦负载过载,内存达到一定阈值,就排队,并且总是预留一定的内存空,防止内存空在宕机的时候不够用,但同时也会出现一个问题——不宕机的时候继续排队。

而且不得不佩服FineReport。他们应该已经深入研究了jvm GC机制的底层原理,采用jvmTI来检测JVM的编程接口,并加入了强制GC机制:

即内存达到阈值后进入队列,触发一次GC,如果没有释放足够多的空槽,就再次GC;但如果内存达到阈值触发了GC,释放的空空间足够,系统会继续运行,不再触发GC,不会导致宕机,大大增加了平台的稳定性。

第四,HTML解析技术

大家都知道html是用来写网站的语言。我在使用以前的报表工具打印导出报表模板时,经常会遇到“以HTML显示内容”的情况,可能会导致导出后出现数据错误和行不显示的情况。后来,我找到了真正的原因:

现在用户开发的系统基本都倾向于基于BS的浏览器。这些系统可能由不同的语言开发,包括HTML、ASP、JSP、PHP等。如果我们想将准备好的报表嵌入到这些页面中,我们必须解析HTML,但是如果你的工具没有这项技术,就会出现上述情况。

像我这样的代码狗,一般都是直接找源代码,调用参数来解决,但是对于很多业务人员来说,基本上是无能为力的。

FineReport显然考虑到了这一点,其html解析器基本消除了html显示的问题,实现了PDF、Excel、Word导出的HTML解析。

动词 (verb的缩写)大数据集的导出

在开发报表时,我经常会遇到一个问题:当我导出一个数据量很大的模板时,非常容易耗时过长或者占用内存过多。

这是为什么呢?因为在检索数据集的过程中,现在必须计算报表才能导出。类似excel的函数计算会大大增加停机风险。

而且用了之后发现FineReport不会有这样的问题。直到我问了他们的开发者,才明白FR在技术层面是如何解决大数据集导出问题的:

首先他们用SXSSFWorkbook流行导出,真的很快。此外,它们采用生产者-消费者模式。一个线程用于获取数据,将数据行存储在队列中,另一个线程读取数据行以便导出。

一般来说,生产者是生产数据的线程,消费者是消费数据的线程。如果生产者处理速度快,而消费者速度慢,那么生产者必须等待消费者完成处理后才能继续产生数据,反之亦然。

FineReport的生产者-消费者模型相当于充当了一个容器。生产者和消费者并不直接交流。生产者产生数据后,不用等消费者处理,直接扔进阻塞队列。消费者不要求生产者提供数据,而是直接从阻塞队列中获取数据。阻塞队列相当于一个缓冲区,平衡生产者和消费者的处理能力。

摘要

对于一个从事报表工作十年的人来说,一个成熟、强大、简洁的报表平台工具是极其重要的。它不仅要解决各种中国式的复杂报表,最重要的是,它要能够快速为企业搭建一个数据平台。这样的工具对企业真的有用,否则只会空自带表,华而不实!

 
友情链接
鄂ICP备19019357号-22