但是,这三种选择都有各自的问题。
普通数据库一样平常都是行式存储,很难得到多维剖析希望的高性能,只适用较小数据量。
专业数据仓库有不少是列式存储的,性能问题不大,但是价格都比较昂贵,培植、扩展和掩护本钱也都非常高。
BI 系统自带的数据源都比较封闭,只能为自家的 BI 前端供应支持,无法为多个不同厂家的前端供应数据做事。

办理思路与过程

集算器可以独立承担轻量级多维剖析后台的浸染,相称于中小型数据仓库或者数据集市。
构造图如下:

dw里面怎么用jsp轻量级可嵌入多维剖析后台 React

集算器可以将多维剖析的数据事先以列存形式存储到二进制文件中,称为组表。
多维剖析前端运用拖拽天生 SQL,通过集算器 JDBC 提交。
集算器对组表实行 SQL 查询,将结果返回给多维剖析前端。
组表文件也可由集算器从各种异构数据源采集数据并打算而来。

和普通数据库方案比较,集算器列存的二进制文件能够直接提升性能。
而对付昂贵的专业数据库和相对封闭的 BI 自带数据源,集算器可以供应更加经济、简便的办理方案,并能够从各种异构数据源采集数据。

集算器有三种支配办法:1、集成在前端运用中;2、独立做事器;3、集群热备。
下面先容详细方法。

案例场景解释

不才面的案例中,多维剖析系统要针对订单数据做自助剖析。
为了简化起见,多维剖析系统前台用 tomcat 做事器中的 jdbc.jsp 来仿照。
Tomcat 安装在 windows 操作系统的 C:\tomcat6。

集算器 JDBC 集成在多维剖析运用中。
jdbc.jsp 模拟多维剖析运用系统,产生符合集算器规范的 SQL,通过集算器 JDBC 提交给集算器 SPL 脚本处理。

多维剖析系统的数据来自于生产数据库 demo 中的 ORDERS 表,生产库是 ORACLE 数据库。
多维剖析系统不能直接连 demo 数据库实现剖析,以免给生产数据库带来过多的压力。
ORDERS 订单表是全量数据,集算器 ETL 每天将当天的最新数据同步到组表文件中。
日期以订购日期 ORDERDATE 为准,假设当前的日期是 2015-07-18。

后台数据初始化

用下面的 ordersAll.sql 文件在 ORACLE 数据库中完成 ORDERS 表的建表和数据初始化。

ordersAll

数据截止到 2017 年 7 月 17 日。

多维剖析系统后台上线初始化的时候,要将 ORDERS 表中的历史数据同步到集算器的二进制文件中。
这是上线前一次性实行的准备事情,上线运行后就不须要实行了。

在集算器中,新建一个数据源 orcl,连接 ORACLE 数据库。
用 SPL 措辞脚本 etlAll.dfx 将全部数据读取到集算器组表文件 orders.ctx 中。
SPL 脚本如下:

Orders.ctx 是组表文件,默认是采取列式存储的,支持任意分段的并行打算,可以有效提升查询速率。
天生组表的时候,要把稳数据预先排序和合理定义维字段。
本例中,按照常常过滤、分组的字段,将维字段确定为:ORDERDATE,CUSTOMERID,EMPLOYEEID, ORDERID。

从 ORACLE 中取得数据的时候,要按照维字段排序。
由于 ORDERDATE,CUSTOMERID,EMPLOYEEID 对应的重复数据多,以是放在前面排序;ORDERID 对应的重复数据少,以是放在后面排序。

B1 单元格中数据库游标的 @d 选项,表示从 ORACLE 数据库中取数的时候将 numeric 型数据转换成 double 型,精度对付金额这样的常见数值完备足够了。
如果没有这个选项就会默认转换成 big decimal 型数据,打算性能会受到较大影响。

ETL 过程

多维剖析系统上线之后,要每天晚上定时同步当天最新的数据。
我们假设当天日期是 2015-07-18。
用下面的 ordersUpdate.sql 文件在 ORACLE 数据库给 ORDERS 表增加当天的数据,仿照数据的增量。

ordersUpdate

用 SPL 措辞脚本 etlUpdate1.dfx 将当天数据增量补充到集算器组表文件 orders.ctx 中。
SPL 脚本如下:

etlUpdate.dfx 的输入参数是 etlDate,也便是须要新增确当天日期。

B4 单元格直接将新数据追加到组表文件中。
由于第一个排序字段是 orderdate,以是追加新数据不会影响排序。
如果第一个排序字段不是 orderdate,就要重新排序。

C4 中的 rollback 是回滚函数,若 B4 实行 append 过程中,涌现缺点,那么将实行回滚操作,规复到 append 操作之前的组表状态。
正常实行完毕,则不会回滚。

etlUpdate1.dfx 脚本可以用 windows 或者 linux 命令行的办法实行,结合定时任务,可以定时实行。
也可以用 ETL 工具来定时调用。

windows 命令行的调用办法是:

C:\\Program Files\\raqsoft\\esProc\\bin>esprocx.exe C: \\etlUpdate1.dfx

linux 命令是:

/raqsoft/esProc/bin/esprocx.sh /esproc/ etlUpdate1.dfx

运用构造一:运用集成打算

集算器 JDBC 集成在多维剖析的运用中,吸收到 SQL 后查本地文件 orders.ctx 返回结果。

1、下面压缩文件中的 DW 目录复制到 tomcat 的运用目录。

DW

目录构造如下图:

配置文件在 classes 中,在官网上获取的授权文件也要放在 classes 目录中。
集算器的 Jar 包要放在 lib 目录中(须要哪些 jar 请参照集算器教程)。

修正 raqsoftConfig.xml 中的主目录配置:

<mainPath>C:\\tomcat6\\webapps\\DW\\WEB-INF\\data</mainPath>

配置好主目录后,orders.ctx 就可以不写全路径名,直接写 from orders.ctx 即可。

2、编辑 DW 目录中的 jdbc.jsp,仿照前台界面提交 sql 展现结果。

<%@ page language=”java” import=”java.util.” pageEncoding=”utf-8″%><%@ page import=”java.sql.” %><body><%String driver = “com.esproc.jdbc.InternalDriver”;String url = “jdbc:esproc:local://”;try {Class.forName(driver);Connection conn = DriverManager.getConnection(url);Statement statement = conn.createStatement();String sql =”select top 10 ORDERID,CUSTOMERID,EMPLOYEEID,ORDERDATE,AMOUNT from ORDERS.ctx where ORDERDATE=date(‘2015-07-18’) and AMOUNT>100″;out.println(“Test page v1<br><br><br><pre>”);out.println(“订单ID”+”\\t”+”客户ID”+”\\t”+”雇员ID”+”\\t”+”订购日期”+”\\t”+”订单金额”+”<br>”);ResultSet rs = statement.executeQuery(sql);int f1,f6;String f2,f3,f4;float f5;while (rs.next()) {f1 = rs.getInt(“ORDERID”);f2 = rs.getString(“CUSTOMERID”);f3 = rs.getString(“EMPLOYEEID”);f4 = rs.getString(“ORDERDATE”);f5 = rs.getFloat(“AMOUNT”);out.println(f1+”\\t”+f2+”\\t”+f3+”\\t”+f4+”\\t”+f5+”\\t”+”<br>”);}out.println(“</pre>”);rs.close();conn.close();} catch (ClassNotFoundException e) {System.out.println(“Sorry,can`t find the Driver!”);e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}%></body>

可以看到,jsp 中先连接集算器的 JDBC,然后提交实行 SQL。
步骤和一样平常的数据库完备一样,具有很高的兼容性和通用性。
对付多维剖析工具来说,虽然是界面操作来连接 JDBC 和提交 SQL,但是基本事理和 jsp 完备一样。

3、启动 tomcat,在浏览器中访问 http://localhost:8080/DW/jdbc.jsp,查当作果。

还可以连续测试如下情形:

1、分组汇总

sql =\"大众select CUSTOMERID,EMPLOYEEID,sum(AMOUNT) 订单总额,count(1) 订单数量 from ORDERS.ctx where ORDERDATE=date(‘2015-07-18’) group by CUSTOMERID,EMPLOYEEID\公众;

2、并行查询

sql=\公众select /+ parallel (4) /top 10 ORDERID,CUSTOMERID,EMPLOYEEID,ORDERDATE,AMOUNT from ORDERS.ctx where ORDERDATE=date('2015-07-18') and AMOUNT>100\"大众

和 ORACLE 类似,集算器大略 SQL 也支持 /+ parallel (4) / 这样的并行查询。

运用构造二:独立做事器

第一种办理办法是利用运用做事器的资源。
在并发量很大,或者数据量很大的情形下,运用做事器会涌现较大压力。
这种情形下,推举用独立的节点做事器进行数据打算。

集算器 JDBC 吸收到 SQL 后,转给 DW.dfx 程序处理。
DW.dfx 调用节点做事器上的 DWServer.dfx 进行打算。
DWServer.dfx 把表名换成文件名,查本地文件 orders.ctx 返回结果。

下面的 DWServer 目录复制到须要的目录。
集算器的节点做事用具备跨平台的特性,可以运行在任何支持 Java 的操作系统上,支配方法拜会集算器教程。
这里假设放到 windows 操作系统的 C 盘根目录。

DWServer

1、系统上线之前实行初始化 dfx,将 orders.ctx 文件放到 C:/DWServer/data 目录中。
测试的时候可以直接将已经天生好的 orders.ctx 复制过去。

2、修正前面的 dfx,将 A1 改为 =file(“C:/DWServer/data/orders.ctx”),另存为 etlUpdate2.dfx。
修恰好的 etlUpdate2.dfx 在 c:\DWServer 目录。

3、打开运用做事器中的 C:\\tomcat6\\webapps\\DW\\WEB-INF\\dfx\\DW.dfx,不雅观察理解 SPL 代码
参数 sql 是传入的 SQL 语句。

A1:调用节点机上的 DWServer.dfx。
参数是 [sql],中括号表示序列,此时是只有一个成员的序列。
[“127.0.0.1:8281”] 是节点机的序列,采取 IP: 端口号的办法。

A2:返回 A1 调用的结果。
由于调用结果是序列,以是要用 ifn 函数找到序列中第一个不为空的成员,便是 SQL 对应的返回结果。

修正 C:\\tomcat6\\webapps\\DW\\WEB-INF\\classes\\raqsoftConfig.xml 中的如下配置:

<mainPath>C:\\tomcat6\\webapps\\DW\\WEB-INF\\dfx</mainPath><JDBC><load>Runtime,Server</load><gateway>DW.dfx</gateway></JDBC>

这里标签的内容便是 JDBC 网关 dfx 文件。
在 BI 系统中调用集算器 JDBC 时,所实行的 SQL 都将交由网关文件处理。
如果不配置这个标签,JDBC 提交的语句会被集算器当作脚本直接解析运算。

4、启动节点做事器。

运行 esprocs.exe, 如下图:

点击配置按钮,配置干系参数:

点击确定后,返回主界面,点击启动按钮。

5、打开 C:\DWServer\dfx\DWServer.dfx,不雅观察理解 SPL 代码。

A1:定义集算器集文件的绝对路径。

A2:将文件名更换为绝对路径。

A3-C3:连接文件系统。
实行 SQL 得到游标并返回。

做事器办法也可以和“运用构造一”中一样配置主目录,A2 就不用写绝对路径了。
路径写在这里的 SPL 中,好处是同一个做事器可以给多套数据表(文件)供应做事。
如果很多文件都在主目录下,会未便利管理。

6、重启 tomcat,在浏览器中访问 http://localhost:8080/DW/jdbc.jsp,查当作果。

运用构造三:集群热备

在并发量不断增大,或者数据量不断增加的情形下,节点做事器可以进行横向扩展,应对大并发或大数据量打算的压力。

1、在另一台 window 的机器上再支配一套集算器节点,支配方法和解决方法二略有不同,须要配置一下数据分区。
两台做事器的 IP 地址是 168.0.122 和 192.168.0.176。
方法二中的 c:\\DWServer 目录也要复制到另一台做事器上。

图中数据分区名称配置为 0,路径是 c:/DWServer/data。
把稳,两个做事器都要配置。

2、改写 168.0.122 上的 c:/DWServer/dfx/etlUpdate2.dfx,另存为 etlUpdate3.dfx。

A6 单元格是将更新之后的 orders.ctx 同步到 192.168.0.176 的 0 分区,也便是 C:/ DWServer/data 目录。
[“192.168.0.176:8281”] 是指须要同步的节点机列表,如果有更多的节点机须要同步,可以写作:[“IP1:PORT1″,”IP2:PORT2″,”IP3:PORT3”]。

由于这里有同步的代码,以是只须要在 192.168.0.122 上实行定时任务 etlUpdate3.dfx 就可以了。

3、打开运用做事器中的 C:\tomcat6\webapps\DW\WEB-INF\dfx\DW.dfx,修正如下:

A1:调用节点机上的 DWServer.dfx。
参数是 [sql],中括号表示序列,此时是只有一个成员的序列。
由于节点机是集群,以是有两个 IP 地址。
在多并发时 callx 会随机访问两个节点。

4、重启 tomcat,在浏览器中访问 http://localhost:8080/DW/jdbc.jsp,查当作果。

集算器上风总结

开放的轻量级数据仓库 / 数据集市

集算器是专业的数据打算中间件(DCM),具备独立打算的能力,可以分开数据库、数据仓库为多维剖析系统前端供应数据源做事。

集算器采取列存数据,具备专业数据仓库的查询性能,千万级别的数据量,可以达到秒级的明细查询速率。
普通数据库一样平常都是行存,无法达到多维剖析的性能哀求。
同时,和专业数据仓库不同,集算器价格都较低,培植、扩展和掩护本钱都比较小。

集算器是开放的,对多维剖析系统前端供应标准的 JDBC 做事。
可以形成平台式的后台数据源,为多个不同厂家的前端同时供应数据做事。

组表列存 / 有序压缩存储

前辈的数据存储办法,是数据打算中间件(DCM)成功履行的主要保障。

集算器组表采取列存办法存储数据,对付字段特殊多的宽表查询,性能提升特殊明显。
组表采取的列存机制和常规列存是不同的。
常规列存(比如 parquet 格式),只能分块之后,再在块内列存,在做并行打算的时候是受限的。
组表的可并行压缩列存机制,采取倍增分段技能,许可任意分段的并行打算,可以利用多 CPU 核的打算能力把硬盘的 IO 发挥到极致。

组表天生的时候,要指定维字段,数据本身是按照维字段有序存放的,常用的条件过滤打算不依赖索引也能担保高性能。
文件采取压缩存储,减小在硬盘上占用的空间,读取更快。
由于采取了得当的压缩比,解压缩占用的 CPU 韶光可以忽略不计。

组表也可以采纳行存和全内存存储数据,支持内存数据库办法运行。

集群功能

敏捷的集群能力可以担保数据打算中间件(DCM)的高性能和高可用性。

集算器节点做事器是独立进程,可以接管集算器 JDBC 的打算要求并返回结果。
对付并发访问的情形,可以发给多个做事器同时打算,提高并发容量。
对付单个大打算任务的情形,可以分成多个小任务,发给多个做事器同时打算,起到大数据并行打算的浸染。

集算器集群打算方案,具备敏捷的横向扩展能力,并发量或者数据量大时可以通过快速增加节点来办理。
集算器集群也具备容错能力,即有个别节点失落效时还能确保全体集群能事情,打算任务能连续实行完毕,起到多机热备和担保高可用性的浸染。

运用推广

作为数据打算中间件(DCM),集算器供应的后台数据源可以支持各种前端运用,不仅仅限于前端是多维剖析的情形。
例如:大屏展示、管理驾驶舱、实时报表、大数据量清单报表、报表批量订阅等等。

集算器形成的后台数据源也可以和数据库、数据仓库合营利用。
集算器实现的数据打算网关和路由,可以在集算器缓存数据和数据仓库之间智能切换,办理数据仓库无法知足性能哀求的问题。
例如:冷热数据分开打算的场景。
详细做法拜会《用打算路由的方法优化BI后台性能》。