Giter Site home page Giter Site logo

data-platform-backend's Introduction

数据报表平台

一、简介

1.数据报表平台的需求背景
   由于vip陪练的线上应用每天会产生大量的数据,线上的情况复杂多变,同时线下的用户(老师和学生)在使用时会产生大量的
课程数据和直播数据,同时也会接收到一些线下的用户反馈,客观上需要我们对整个课程和直播的数据进行全方位的监控,用于统计
每天在线课程和直播的一些数据,以及异常数据的统计,由于业务情况随时可能会产生一些新的报表需求,这就要求数据报表平台能
够可配置化,让每次新的报表需求来临的时候能够快速响应,数据报表平台目前支持动态接入数据源,并根据数据报表支持SQL级
别的灵活控制,字段级的灵活处理,并可对SQL的报表统计对外以http接口的方式输出,http接口输出报文可配置化,非常灵活,
可以快速有效的支持VIP陪练的线上报表统计需求。
2.数据报表的后端设计
1. 数据表结构设计:数据报表平台功能强大灵活,但是数据表设计遵循了极简的设计,一共设计了3张数据库表,
   data_source表,主要用于配置数据库连接信息,包括数据库访问地址、用户名和密码,用于生成访问数据库的jdbcTemplate;
   api_source表,主要用于配置对外输出的http接口信息,主要可配置接口的取数逻辑sql和接口对外的返回类型(对象或者数组);
   data_convert表:对于接口字段某些需要特殊处理的字段可进行bsh脚本处理,bsh脚本可配置于数据库中;
   data_flow表:主要用于配置分片sql执行,主要配置分片执行sql,和分片sql的类型:all(全集)和sub(子集)
2. 数据报表平台可配置化理念:动态的数据源配置可让数据报表平台接入任意数据库,满足报表可在不同的数据库中统计的需求;接口
   输出的可定制化灵活配置,数据报表平台既支持输出的报文可为object对象类型也可以为array形式的列表类型,满足单条和多条
   记录的报表统计需求,同时对外输出的http接口报文字段可智能识别sql的别名配置;接口字段级的灵活处理,如果在报表统计中
   出现了sql无法完成的逻辑计算操作,数据报表平台提供了灵活的bsh脚本进行对单个字段的计算处理,可以可化配置化的支持复杂
   字段的逻辑处理需求,以极简的设计最大的满足了数据报表统计工作的灵活性和复杂性的要求。
3. 分片sql功能介绍,:由于生产库数据量巨大,数据表的量级都在千万级别以上,因此一条复杂的报表统计sql无法完成统计,因此
   我们设计将sql分拆开几条sql,分拆的理念是每条分片sql返回的结果集必须是一样的,配置了all类型的分片sql为全集,配置
   了若干条sub类型的sql为子集,在交给java处理的时候,会将sub集合进行去重合并,然后再用all类型的全集减去sub的并集,
   最终得出汇总后的结果。
4. 数据报表平台可以定时任务的方式进行报表任务的运行和调度,同时会接入邮件报警和钉钉消息报警,既可统计也可报警监控。考虑
    到消息打印的美观性,钉钉只提供统计结果的邮件通知,并展示结果条数,具体的统计结果将详细的在邮件中以html的表格展示。
5. 后期会配管理端 配置。

3.数据报表平台的配置和使用方法

1. 数据表配置:目前没有管理平台配置,需通过手工配置data_source表、api_source表和data_convert表;
2. application.properties文件配置:根据项目中的配置模板完成对该文件的配置;
3. 使用方法:启动项目后,POST访问接口,访问示例如下:
curl --location --request POST 'http://localhost:8080/v1/data-paltform/getData \
--header 'Content-Type: application/json' \
--data-raw '{
    "apiCode":"apiCode1",
    "paramJson":{
    "sqlparam1": "xx",
    "sqlparam2": xx
    }
   }'
其中,sqlparam1和sqlparam2要对应该接口配置的query_sql中的where条件参数
如示例的sql配置如下:select a1, a2, a3 from test where b1=#{sqlparam1} and #{sqlparam2}
在分片sql中也支持该sql查询变量的配置。
如果没有查询条件可不配,注意配置sql查询入参的时候只能用#{}的方式,不能用?和其他方式代替。
4.支持xxl-job任务配置,定时任务的入参例如 { "apiCode":"xxx", "paramJson":{"param1": "xx", "param2": "xxx"} }
入参以json字符串为键,其中apiCode是json的必须传入的键,其他的键值对参数由报表统计sql的where查询条件决定,
查询条件没有入参,则无需传param值,传入{ "apiCode":"xxx"}即可,apiCode即接口代码。
如果sql的where条件后带了#{param},则入参就是 { "apiCode":"xxx", "param": "xx" },
在接口http://localhost:8080/data-platform/v1/getDict?apiCode=bizTest中提供了字典项的翻译,里面有专门
的在配置完sql后提供了查询字段和查询参数字段的查询。

data-platform-backend's People

Watchers

zhengshangchao avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.