前言
各位小伙伴大家好,这里是小卡,已经差不多有两个月没有更新博客了,这是因为小卡这段时间参与设计并开发了一款企业的大数据智能分析平台。这也是小卡第一次从程序后台的实现,前端的交互,以及用户的友好度等不同的角度去思考一款产品,意义重大故而记录一下整个研发过程。
一、什么是DataA?
DataA是一个智能的BI报表生成工具,能够在大数据的支持下生成一系列的复杂报表,有了此工具,对清洗后的数据分析效率将会大大的提升。
目前该工具是集成在某省的交通大数据平台,同时我们也孵化出来了一个单品,长期的目标是独立成为一个大数据智能分析平台。
二、DataA的设计
1.总体设计图
访问流程图:
2.项目架构
-
总体架构
项目采用分布式架构,多模块但只暴露一个web应用多个feign接口的形式,保证前端和后端的交互入口只有一个,方便部署和配置。
-
调用规则
上层服务可直接通过模块feign调用下层服务,下层服务理论上是不能够调用上层服务的,如果业务需求必须要调用到则需要通过统一暴露的web层调用。
-
访问规则
-
模块调用规则
模块之间的调用使用非严谨型,原因是在某些场景中可以节约部分开发时间。
-
项目约束
Res尽量只能出现在Controller中,以保证service中的接口可以复用
service中尽量只处理逻辑业务不做返回数据的封装
在不需要级联查询的情况下,尽量用框架操作数据库,避免书写sql
使用统一的Result<>来做返回结果,并且使用failfast()
failfast()是自定义在框架中的快速失败方法。
该处使用的url网络请求的数据。
- 对象约定
数据类型 | 说明 |
---|---|
Entiy | 实体,和数据库字段一致,用于插入数据等 |
Bo | 逻辑操作对象,作用域仅限于Service层 |
Req | 请求入参 |
Res | 返回参数,展示给用户的信息 |
Query | 查询入参 |
- 字段约定
字段名 | 说明 |
---|---|
GMT_ | 时间类型开头的使用GMT_开头 |
SORT | 排序类型使用SORT |
IS_ | 是否类型使用IS_开头 |
others | 参考阿里巴巴开发手册 |
数据库设计
数据库设置比较私密这里就不给出来了
分布式数据源设计
-
数据源服务
提供数据源连接功能;数据结构查询功能;数据查询功能。
- 流程设计图
-
整体采用发布订阅模式
-
数据源服务在接受到数据源新增、删除、修改操作时,对服务本身不进行数据源的变动,只会将数据源信息进行持久化
-
数据源服务在接受到数据源新增、删除、修改操作后,将消息发送到相应的channel,各个订阅者再进行消费,完成相应操作
-
说明
1、服务器发起的数据源新增动作时首先pub到相应channel
2、订阅者sub消息,再将新增数据源信息同步到各个系统中
3、各系统完成服务数据源的新增动作 -
拓展
若对消息可靠性要求严格,可扩展使用MQ来进行发布订阅。预留扩展接口,只需改变启动注解即可完成。 -
数据流程图
数据集设计
-
数据集模块
数据集服务:提供数据集相关功能。主要依赖数据源服务。
-
数据关联及流向
-
数据集时序图
-
核心流程
1.新建数据集
生产数据集viewSql流程:
1.递归拿到各个表之间的关联
2.通过feign调用dataSource拿到各表字段信息
3.别名规则为:表名split下划线后的首字母结合 + 字段名demo_hikcreate_user.name AS dhu.name
4.运行sq创建视图2.自定义sql数据集
3.解析自定义sql
4.新增自定义字段
注意:
复制数据集
复制数据集的时候需要注意需要生成一个文件
查看数据集相关字段
注意需要分种类填充相关字段:1.普通(原始)字段 2.自定义公式字段 3.自定义条件字段
电子表格设计
- 电子表格
电子报表服务:提供可视化BI报表功能。依赖数据集、数据源、系统服务、用户服务 - 创建报表
- 查看报表
- 说明
电子表格里面的流程及其复杂,这里就不在概述了。
总结
小卡写这个项目的时候真是一波三折,数据源最开始没考虑mysql,没考虑es、没考虑hbase只考虑了Oracle。mysql 有limit 1 oracle只能是rownum。数据源在做条件字段 case when 的时候数据卡死,这些问题都是遇到过的。union之后的数据集和普通表再做join也非常麻烦,处理自定义sql,解析sql,生成自定义字段,那叫一个复杂,更不用提后面的更新了。
这个项目让我从写接口变成了设计产品并实现,感悟很深,要学的东西还是太多。仅此记录,如果有小伙伴需要和我做一样的项目可以联系俺,俺会和你交流一下。