资讯详情

轻量级高性能多维分析套件

什么是轻量级?抛开技术术语不谈,效果是为了达到操作目的,使用更轻更省时的方法;那么什么是高性能呢?最直接的说法是比常用方法更高效、更快。

以下是润乾提供的轻量级、高性能多维分析套件

与重量级框架相比,轻量级的准确含义是一种程序设计模式。轻量级的优点是不依赖容器,易于配置,更通用,启动时间短,可以完全降低开发的复杂性;高性能是指比常用方法更快、更准确地实现预期结果的方法。具体到润乾报告,这里将介绍通过多维分析页面简单SQL进行查询。

这个过程实际上非常简单:我们简单地输入多维分析页面 SQL句子,通过集算器 JDBC 提交,然后执行组表 SQL 将结果返回多维分析前端进行查询。结构图如下:

undefined

其中,集算器从各种异构数据源中收集和计算组表文件。具体做法可参考集算器教程 - 组表》。

由于组表文件具有独立计算的能力,可以脱离数据库为前端提供数据源服务,因此非常适合作为中间件,并在此基础上实现这套服务olap套件。让我们用集算器进行测试,进一步了解和使用组表文件oracle对比,更直观地了解该套件的轻量级和高性能特性。

处理器 Inter(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40GHz
内存 8G
硬盘 1TB
操作系统 Windows10 家庭中文版(64 位)

由于测试的目的是组表和oracle对比,因此在同一环境下对数据进行对比,设备影响因素不大,性能对比仍是有效的参考。

为了充分反映测试效果,测试用例的数据必须足够大。我们将创建至少10个字段的5000万数据表。

首先,在集算器中生成测试数据txt格式文件:

=create(ID,产品编号、颜色、内存、扩展容量、核心数量、主屏幕尺寸、电池容量、后摄像头、前摄像头、机身重量、保修时间、双卡、上市时间、单价、库存)
[黑、白、银、玫瑰金、土豪金] [0,0.5,0.75,0.9,0.95,1]
[32,128,64,16,8]
[64,16,8,128,32]
[2,8,4] [0,0.5,0.9,1]
2018-01-01 =workdays(A6,A6 364)
for 500 =100000.new((A7-1)*100000 #:ID,rands("abcdefghijklmnopqrstuvwxyz0123456789",36): 产品编号,A2(B2.pseg(rand())): 颜色,A3(B2.pseg(rand())): 内存,A4(B2.pseg(rand())): 扩展容量,A5(B5.pseg(rand())): 核心数,(string(round((rand()*(6-5) 5),1)) "寸"): 主屏尺寸,(string(int(round((rand()*(4-3) 3),1)*1000)) "mAh"): 电池容量,(string(int(round((rand()*(3-2) 2),1)*1000)) "万 / 像素"): 后置摄像头,(string(int(round((rand()*(2-1) 1),1)*1000)) "万 / 像素"): 前置摄像头,(string(int(round((rand()*(2-1) 1),2)*100)) "克"): 机身重量,(string(int(rand()*3 1)) "年"): 质保时间,if(rand()<0.5,"支持","不支持"): 双卡双待,string(elapse(A6,-rand(100))): 上市时间,int(rand()*(4999-1999)): 单价,int(rand()*(999-9)): 库存量 )
>file("D:\\test.txt").export@ta(B7)

生成的txt文件大小为6284M。

然后我们必须这样做txt中间的手机产品表数据,使用 SPL 语言脚本转储到集算器组表文件 test.ctx 中。SPL 脚本如下:

=file("D:\\test.ctx")
=A1.create(ID,产品编号、颜色、内存、扩展容量、核心数量、主屏幕尺寸、电池容量、后摄像头、前摄像头、机身重量、保修时间、双卡、上市时间、单价、库存)
=file("D:\\test.txt").cursor@t()
=A2.append(A3)

test.ctx 它是一个组表文件,默认采用列存储,支持任何分段的平行计算,从而有效地提高查询速度。需要注意的是,在生成组表时,数据需要提前排序并合理定义维字段。

组表文件的大小约为3312M,而将txt968s。

相应地,我们使用它sqlloader将txt导入中数据oracle在中间,大约需要18小时,相同的字段和数据量oracle6683表占用空间M。

可见,将txt分别导入组表文件和数据oracle表中的时间真的很不一样,数据导入oracle后占用空间的大小和txt由于组表文件的压缩效果,文件的大小几乎相同,由于组表文件的压缩效果,组表文件只占空间的一半。稍后,我们将进一步讨论和分析与高性能相关的特征。

让我们比较一下使用情况SQL查询oracle表和组表文件所需的时间直接用效果说话:

查询指定字段:

:select ID,产品编号,库存 from test.ctx limit 5000

:select ID,产品编号,库存 from myTestTable where rownum <= 5000

查询ID、产品编号和库存:查询组表1s;查询oracle表用时33s;

添加where查询条件:

:select ID,产品编号,库存 from test.ctx where 颜色=’土豪金’limit 5000

:seect ID,产品编号,库存量 from myTestTable where 颜色=’土豪金’ and rownum <= 5000

查询表中产品颜色为土豪金的数据:查询组表用时1s;查询oracle表用时58s;

select ID,产品编号,单价,库存量 from myTestTable/test.ctx where 颜色=’黑’ and 库存量 > 500 and 单价 > 2000

查询颜色为黑且库存量大于500、单价大于2000的数据:查询组表用时92s;查询oracle表用时2353s;

此时我们还可以尝试并行查询:

select /*+ parallel(4) */ID,产品编号,单价,库存量 from myTestTable/test.ctx where 颜色=’黑’ and 库存量 > 500 and 单价 > 2000

查询组表用时84s;查询oracle表用时2105s;

执行以上查询语句后我们可以发现,查询组表的速度要比直接查询oracle表快很多。当然,多维分析中很少用到明细查询,对明细查询的性能要求也不高,我们更关注汇总统计的性能,也就是有GROUP BY的情况,下面来试一下。:

:select 颜色,max(库存量) from test.ctx/myTestTable group by 颜色

查询产品每个颜色的最大库存量:查询组表用时12s;查询oracle表用时297s;

:select 颜色,内存,max(库存量) from test.ctx/myTestTable group by 颜色,内存

查询产品每个颜色中,各内存的最大库存量:查询组表用时17s;查询oracle表用时334s;

:select /*+ parallel(4) */颜色,内存,max(库存量) from test.ctx/myTestTable group by 颜色,内存

尝试并行查询产品每个颜色中,各内存的最大库存量:查询组表用时13s;查询oracle表用时308s;

:select 内存,sum(库存量) from test.ctx where 上市时间 between date('2018-01-01') and date('2018-12-31')  group by 内存

:select 内存,sum(库存量) from myTestTable where 上市时间 between to_date('2018-01-01',’yyyy-mm-dd’) and to_date('2018-12-31',’yyyy-mm-dd’)  group by 内存

查询2018年上市的产品中各种内存的总库存量:查询组表用时5s;查询oracle表用时10s;

:select 内存,min(机身重量),avg(单价) from test.ctx where 上市时间 between date('2018-01-01') and date('2018-12-31')  group by 内存

:select 内存,min(机身重量),avg(单价) from myTestTable where 上市时间 between to_date('2018-01-01',’yyyy-mm-dd’) and to_date('2018-12-31',’yyyy-mm-dd’)  group by 内存

查询2018年上市产品的最小机身重量和平均单价:查询组表用时6s;查询oracle表用时11s;

:select 内存,min(机身重量),avg(单价) from test.ctx where 上市时间 between date('2018-01-01') and date('2018-12-31') group by 内存 having avg(单价)>=1500

:select 内存,min(机身重量),avg(单价) from myTestTable where 上市时间 between to_date('2018-01-01',’yyyy-mm-dd’) and to_date('2018-12-31',’yyyy-mm-dd’)  group by 内存 having avg(单价)>=1500

查询2018年上市产品中,单价不小于1500的最小机身重量和平均单价:查询组表用时14s;查询oracle表用时38s;

毫无悬念,对于汇总统计,查询组表的速度也要显著快于查询oracle。

根据上面对大数据量的组表以及数据库的查询速度比较,可以发现查询条件越少,两者之间的效率对比也就越明显,查询组表数据始终快于查询数据库,这就清晰地体现除了组表高性能的特点。由此我们推断,在多维分析页面下,对组表进行查询要比对数据库进行查询更加高效。

下面我们就将组表与分析界面结合起来进行查询。

(1)在报表中添加集算器JDBC并连接数据源:

(2)集算器raqsoftConfig.xml复制到报表WEB-INF的类路径下:

将[集算器目录]\esProc\config下的raqsoftConfig.xml复制到[报表目录]\report\web\webapps\demo\WEB-INF\classes中;

(3)将组表文件放到集算器寻址路径路径下:

本例中,我们将使用组表文件test.ctx。

(4)修改多维分析页面

打开[报表目录]\report\web\webapps\demo\raqsoft\guide\jsp\olap.jsp,将jsp中的DataSource修改为(1)中设置的数据源名称“esproc”;依旧使用上述的示例,sql语句这里我们用“select 内存,avg(单价) as 单价平均值 from test.ctx where 上市时间 between date('2018-01-01') and date('2018-12-31')  group by 内存”;

(5)访问页面

我们通过双击[报表目录]\report\bin下的startdemo.bat启动服务器,或者在报表IDE中点击

启动Tomcat服务器。

在浏览器地址栏输入“http://localhost:6868/demo/raqsoft/guide/jsp/olap.jsp?sqlId=sqlId1”对页面进行访问,这时页面中就可以展现从集算器JDBC中所返回的数据,并且可以在页面中进行拖拽等操作。

当然,这里还是要对比一下查询组表文件与查询oracle的时间:查询组表文件用时7s,查询oracle用时22s,组表明显更胜一筹。

将组表与多维分析界面进行结合,从组表而不是从数据库中取数,用户可以更方便的制作数据量大的报表,大大缩短了等待数据显示的时间;对比昂贵的专业数据库和相对封闭的 BI 自带数据源,集算器可以提供更加经济、简便的解决方案,并能够从各种异构数据源采集数据生成组表文件以供使用。同时整个配置过程非常简单,这些都体现了这个套件的轻量级、高性能的特点。

和普通数据库方案相比,集算器列存的二进制文件,也就是组表文件,能够直接提升性能。在生成组表时,指定了维字段,数据本身将按照维字段有序存放,这样,常用的条件过滤计算不依赖索引也能保证高性能。另外,更加轻量的一点是,组表文件采用压缩存储,显著减少了所占用的硬盘空间,读取也就更快了。

标签: 308s传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台