[有意思的代码] DataBand: DataBand(数据帮),快速采集清洗,任务管理,实时流和批处理数据分析,数据可视化展现,快速数据模板开发,ETL工具集、数据科学等。是轻量级的一站式的大数据平台。

[](#databand%E6%95%B0%E6%8D%AE%E5%B8%AE-%E8%BD%BB%E9%87%8F%E7%BA%A7%E4%B8%80%E7%AB%99%E5%BC%8F%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B9%B3%E5%8F%B0)DataBand数据帮 轻量级一站式大数据分析平台

项目启动于2020-10-26,持续更新中。

[](#%E5%AE%8C%E6%95%B4%E5%BC%80%E5%8F%91%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3)完整开发使用文档

详情开发使用介绍

[](#%E4%BB%8B%E7%BB%8D)介绍

DataBand(数据帮),快速采集清洗,任务管理,实时流和批处理数据分析,数据可视化展现,快速数据模板开发,ETL工具集、数据科学等。是轻量级的一站式的大数据平台。 我们致力于通过提供智能应用程序、数据分析和咨询服务来提供最优解决方案。

[](#%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84)软件架构

架构

[](#%E6%8A%80%E6%9C%AF%E6%A0%88)技术栈

[](#%E5%AD%98%E5%82%A8)存储

  • 分布式存储:HDFS、HBase
  • 行式关系存储:MySQL、Oracle
  • 列式存储:ClickHouse
  • 列族存储:HBase、Cassandra
  • 文档库:ElasticSearch、MongoDB

[](#%E8%AE%A1%E7%AE%97)计算

  • 计算引擎:Presto、Hive
  • 流处理:Storm、Flink

[](#%E9%9B%86%E6%88%90)集成:

  • Flume
  • Filebeat
  • Logstash

[](#%E5%89%8D%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88)前端技术栈

  • Vue
  • Element UI

[](#%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF%E6%A0%88)后端技术栈

  • Spring Boot
  • Spring Cloud
  • MyBatis

[](#%E5%B7%A5%E7%A8%8B%E8%AF%B4%E6%98%8E)工程说明

[](#%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%A8%A1%E6%8B%9F%E6%95%B0%E6%8D%AE%E6%BA%90%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE%E6%95%B0%E6%8D%AE%E5%87%86%E5%A4%87%E5%B7%A5%E7%A8%8B)大数据模拟数据源生成数据(数据准备工程)

数据源:

数据源

  • databand-mock-api:接口模拟工具,模拟业务系统api;
  • databand-mock-log:日志模拟工具,手动产生大量的日志数据供调试测试,比如Syslog、log、CSV生成、Json、MySQL注入、RPC写、NetCat等;
  • databand-mock-mq:日志模拟工具,通过MQ写产生大量的日志数据供调试测试,比如RabbitMQ写、Kafka写等;
  • databand-mock-hadoop:大数据日志模拟工具,hdfs和mapreduce相关;

[](#%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86%E6%B8%85%E6%B4%97%E9%87%87%E9%9B%86%E6%B8%85%E6%B4%97%E5%B7%A5%E7%A8%8B)数据采集清洗(采集清洗工程)

ETL

  • databand-etl-mysql_ods:采集清洗mysql数据比如MySQL到ods临时中间库(包括Redis、Kafka等);
  • databand-etl-mysql_olap:采集清洗mysql数据到OLAP数据仓库;
  • databand-etl-mysql_hadoop:采集清洗mysql数据到Hadoop分布式存储;
  • databand-etl-logfile_ods:采集清洗半结构化日志文件,比如json、xml、log、csv文件数据到ods临时中间库;
  • databand-etl-logfile_olap:采集清洗半结构化日志文件数据到OLAP数据仓库;
  • databand-etl-logfile_hadoop:采集清洗日志文件数据到Hadoop分布式存储;
  • databand-etl-mq_ods:通过MQ消费采集数据,入ods库;
  • databand-etl-mq_olap:通过MQ消费采集数据,入OLAP库;
  • databand-etl-mq_hadoop:通过MQ消费采集数据,入Hadoop;- databand-ml:数据科学工程;

[](#%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E4%BD%9C%E4%B8%9A%E5%AE%9A%E6%97%B6%E4%BD%9C%E4%B8%9A%E8%B0%83%E5%BA%A6%E5%B7%A5%E7%A8%8B)数据分析作业(定时作业调度工程)

  • databand-job-springboot:定时任务作业调度服务,支持shell,hive,python,spark-sql,java jar任务。
  • databand-streamjob-springboot:流数据作业,支持kafka数据消费至clickhouse、mysql、es等。

[](#%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%97%A8%E6%88%B7%E5%90%8E%E7%AB%AF%E7%AE%A1%E7%90%86%E5%92%8C%E5%89%8D%E7%AB%AF%E5%B1%95%E7%A4%BA%E5%B7%A5%E7%A8%8B)数据分析门户(后端管理和前端展示工程)

  • databand-admin-ui:前后端分离的纯前端UI工程,数据展现(目前未开发);
  • databand-admin-thymeleaf:后端权限、关系、站点配置管理(前后端不分离,正在开发的版本),基于若依框架;
  • databand-admin-api:数据api服务;
  • databand-admin-tools:BI工具集;

[](#%E6%84%BF%E6%99%AF%E7%9B%AE%E6%A0%87)愿景目标

3年愿景目标 愿景目标

[](#%E5%B7%A5%E7%A8%8B%E7%BB%86%E8%8A%82%E8%AF%B4%E6%98%8E)工程细节说明

[](#databand-mock-api-%E6%A8%A1%E6%8B%9F%E6%95%B0%E6%8D%AE%E6%BA%90api%E5%B7%A5%E7%A8%8B--api%E6%A8%A1%E6%8B%9F%E5%B7%A5%E5%85%B7)databand-mock-api (模拟数据源API工程) API模拟工具

  • App.java:一个简单的mock控制台程序

api mock详情介绍

api mock工程源码

[](#databand-mock-log-%E6%A8%A1%E6%8B%9F%E6%95%B0%E6%8D%AE%E6%BA%90%E7%94%9F%E6%88%90%E6%97%A5%E5%BF%97%E6%95%B0%E6%8D%AE%E5%B7%A5%E7%A8%8B--%E6%97%A5%E5%BF%97%E6%A8%A1%E6%8B%9F%E5%B7%A5%E5%85%B7)databand-mock-log (模拟数据源生成日志数据工程) 日志模拟工具

目前是简单的控制台小程序,直接运行main即可。

  • CsvMock.java:csv文件生成,运行后在"FILE_PATH"定义的文件夹中可找到csv文件:
  • LogMock.java:log文件生成,生成路径见配置文件:logback.xml。 win下默认“c:/logs/”,linux 或 mac下路径请自行修改:
  • JsonMock.java:json文件生成,在"FILE_PATH"定义的文件夹中可找到json文件:
  • XmlMock.java:xml文件生成,在"FILE_PATH"定义的文件夹中可找到json文件:
  • RpcMock.java:rpc输出,运行后可以用flume(或filebeat)进行测试,配置文件见:/flumeConf/avro-memory-log.properties:运行脚本: flume-ng agent --conf conf --conf-file /usr/app/apache-flume-1.8.0-bin/avro-memory-log.properties --name a2 -Dflume.root.logger=INFO,console
  • SyslogMock.java:syslog(udp)输出,运行后可以用flume(或filebeat)进行测试,配置文件见:/flumeConf/syslog-log.properties:
  • TcpMock.java:Tcp输出,运行后可以用flume进行测试,配置文件见:/flumeConf/syslog-log.properties:
  • MySQLMock.java:mysql数据生成,通过list键值对形式对数据表进行写操作。

log mock工程源码

[](#databand-mock-mq-%E6%A8%A1%E6%8B%9F%E6%95%B0%E6%8D%AE%E6%BA%90%E7%94%9F%E6%88%90%E6%97%A5%E5%BF%97%E6%95%B0%E6%8D%AE%E5%B7%A5%E7%A8%8B-mq%E6%B6%88%E6%81%AF%E6%A8%A1%E6%8B%9F%E7%94%9F%E6%88%90%E5%B7%A5%E5%85%B7)databand-mock-mq (模拟数据源生成日志数据工程) MQ消息模拟生成工具

目前是简单的控制台小程序,直接运行main即可。

  • KafkaProducer.java:Kafka消息生成:
  • KafkaConsumer.java:Kafka消息消费:
  • RabbitMQProducer.java:RabbitMQ消息生成:
  • RabbitMQConsumer.java:RabbitMQ消息消费:

mq mock工程源码

[](#%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)使用说明

[](#%E6%95%B0%E6%8D%AE%E6%BA%90%E6%97%A5%E5%BF%97)数据源日志

类型分为:

  • CSV日志,用于批处理,采用UTF-8字符集,每行(\r\n)表示一条记录,每条记录中各个字段的值使用双引号括起来,并使用逗号(,)分隔;
  • Kafka 日志,用于流处理,生产者策略性的产生一些有偏移属性的带日期时间数据。

业务:

  • a)产品销售日志,采用CSV格式;
  • b)节目播出日志,采用CSV格式;
  • c)搜索热词日志,采用kafka;
  • d)广告播放日志,采用kafka;

数据定义,批处理类型日志,原始数据源为csv,暂时以这两个业务作为批处理数据演示,实际上平台将是与业务无关的,只关注数据流和数据服务。

一、产品销售csv日志: 处理类:org.databandtech.logmock.ProductSalesCSVLog

  • 1 产品id productId
  • 2 产品分类id categoryId
  • 3 型号规格 modelId
  • 4 颜色 color
  • 5 买家id userId
  • 6 购买日期 saleDatetime
  • 7 购买数量 buyCount
  • 8 购买金额 buyTotle
  • 9 折扣金额 buyDiscount
  • 10 城市 cityCode
  • 11 地址 address

二、节目播出csv日志 处理类:org.databandtech.logmock.ShowsCSVLog

  • 1 用户id userId
  • 2 状态类型码 status
  • 3 城市 cityCode
  • 4 区县 areaCode
  • 5 收视开始时间 beginTime
  • 6 收视结束时间 endTime
  • 7 节目ID showId
  • 8 栏目ID columnId
  • 9 频道ID channelId
  • 10 高清标志码 hd
  • 11 节目类型码 showType

状态类型码:

  • 1:"tv_playing"、2:"vod_playing"、3:"browsing"、4:"tvod_playing"、5:"ad_event" 、6:"external_link"、7:"order"

高清标志码:

  • 0:标清、1:高清、2:智能、3:其他

节目类型码:

  • 电视剧:tv、电影:movie、综艺:variety、其他:other

流类型日志,原始数据源为kafka,暂时以这两个业务作为流数据演示,实际上平台将是与业务无关的,只关注数据流和数据服务。

三、搜索热词日志: 处理类:org.databandtech.mockmq.HotWordKafkaLog

Kafka Topic: HOTWORDS

  • 1 KEYWORD 热词
  • 2 USERID 用户id
  • 3 TS 搜索时间

四、广告监测日志 处理类:org.databandtech.mockmq.AdKafkaLog

Kafka Topic: ADMONITOR

  • 1 OS 设备的操作系统类型
  • 2 UID 用户id
  • 3 MAC1 MAC地址
  • 4 MACCN 当前联网形式
  • 5 IP IP
  • 6 ROVINCECODE 所属省份代码
  • 7 CITYCODE 所属城市代码
  • 8 AREACODE 所属区县代码
  • 9 TS 客户端触发的时间
  • 10 ADMID 广告素材
  • 11 ADID 广告主
  • 12 APPNAME 应用名称

[](#%E5%88%86%E5%B8%83%E5%BC%8F%E5%AD%98%E5%82%A8-%E5%8E%9F%E5%A7%8B%E8%AE%B0%E5%BD%95%E5%A4%87%E4%BB%BD)分布式存储-原始记录备份

从CSV日志生成的数据源需要做原始文档的备份存储,使用HDFS,而kafka流数据则依据具体情况选择是否存入HDFS或者HIVE,还是直接清洗后,存入ClickHouse等。

将CSV日志原始存档进HDFS的方式:

  • 1、直接Put文件目录进hdfs文件系统;
  • 2、使用Flume的spooling-to-hdfs,使用方法见databand-etl-flume中的spooling-memory-hdfs2.properties
  • 3、使用databand-job-springboot定时任务,类型为HdfsBackupJob。

将kafka存进HDFS的方式:

  • 1、使用Flume的kafka-to-hdfs,使用方法见databand-etl-flume中的kafka-flume-hdfs.properties;
  • 2、使用Flink或者Storm导入,例子见databand-etl-storm、databand-etl-flink;
  • 3、使用kafka的客户端库和hdfs客户端库,自行开发。

[](#%E5%88%86%E5%B8%83%E5%BC%8F%E5%AD%98%E5%82%A8-%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93%E5%AD%98%E6%A1%A3)分布式存储-数据仓库存档

产品表外部表,建表语句

CREATE EXTERNAL TABLE product(address STRING,buycount INT,buydiscount INT,buytotle INT,categoryid STRING,citycode STRING,color STRING,modelid STRING,productid STRING,saledatetime STRING,userid STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/home/product';

节目表外部表,建表语句

CREATE EXTERNAL TABLE show(areacode STRING,channelid STRING,citycode STRING,columnid STRING,hd INT,showdatetime STRING,showduration INT,showid STRING,status STRING,userid STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/home/show';

– 可以用load data引入数据,覆盖引入: – LOAD DATA LOCAL INPATH '/home/product/2020-12-20.csv' – OVERWRITE INTO TABLE product;

– HDFS 文件 – hive> LOAD DATA INPATH '/home/product/2020-12-20.csv' – > OVERWRITE INTO TABLE product;

– 本地文件 – hive> LOAD DATA LOCAL INPATH '/home/product/2020-12-20.csv' – > OVERWRITE INTO TABLE product;

Count计数语句

  • 计算累计订单数:select count(1) from product;
  • 计算地区为广州的订单数:select count(1) from product where cityCode="广州";
  • 计算节目数:select count(1) from show;
  • 计算日志为破茧的记录数:select count(1) from show where showid="破茧";
  • 计算2020-12月的全部DELL电脑订单金额:select sum(buytotle) from product where modelid="DELL" and instr(saledatetime,"2020-12")>0;

可以测试一下hive输出结果: hivejob

[](#%E5%88%86%E6%9E%90%E8%A7%84%E5%88%92---%E7%BB%9F%E8%AE%A1%E6%8C%87%E6%A0%87%E8%A7%84%E5%88%92)分析规划 - 统计指标规划

[](#%E4%BA%A7%E5%93%81%E9%94%80%E5%94%AE%E6%97%A5%E5%BF%97--%E7%BB%9F%E8%AE%A1%E8%A7%84%E5%88%92)产品销售日志 统计规划

X轴维度 - key

  • 时间维度: 年、季、月、周;
  • 产品分类维度:按产品类型,如电视、PC;
  • 按产品型号规格维度;
  • 按城市分组维度;
  • 按购买者维度;

Y轴维度 - value

  • 订单数
  • 订单金额

指标:

  • 产品各分类订单数,product_order_count_by_cate,按年、季、月、周、天;
  • 产品各型号规格订单数,product_order_count_by_model,按年、季、月、天;
  • 各城市分布订单数,product_order_count_by_city,按年、月;
  • top20订购者订单数,product_order_count20_by_user,按年、月;
  • 产品各分类订单金额,product_order_amount_by_cate,按年、季、月、周、天;
  • 产品各型号规格订单金额,product_order_amount_by_model,按年、季、月、天;
  • 各城市分布订单金额,product_order_amount_by_city,按年、月;
  • top20订购者订单金额,product_order_amount20_by_user,按年、月;

[](#%E8%8A%82%E7%9B%AE%E6%92%AD%E5%87%BA%E6%97%A5%E5%BF%97-%E7%BB%9F%E8%AE%A1%E8%A7%84%E5%88%92)节目播出日志 统计规划

X轴维度 - key

  • 时间维度: 年、季、月、周;
  • 城市维度
  • 频道维度
  • 节目维度
  • 用户维度

Y轴维度 - value

  • 播放时长
  • 播放次数

指标:

  • 按城市分组播放时长,show_dration_by_city,按年、季、月、周、天;
  • 按频道分组播放时长,show_dration_by_channel,按年、季、月;
  • 按节目top20播放时长,show_dration20_by_show,按年、月;
  • 按用户top20播放时长,show_dration20_by_user,按年、月;
  • 按城市分组播放次数,show_times_by_city,按年、季、月、周、天;
  • 按频道分组播放次数,show_times_by_channel,按年、季、月;
  • 按节目top20播放次数,show_times20_by_show,按年、月;
  • 按用户top20播放次数,show_times20_by_user,按年、月;

[](#%E6%90%9C%E7%B4%A2%E7%83%AD%E8%AF%8D%E6%97%A5%E5%BF%97-%E7%BB%9F%E8%AE%A1%E8%A7%84%E5%88%92)搜索热词日志 统计规划

待完成

[](#%E5%B9%BF%E5%91%8A%E7%9B%91%E6%B5%8B%E6%97%A5%E5%BF%97-%E7%BB%9F%E8%AE%A1%E8%A7%84%E5%88%92)广告监测日志 统计规划

待完成

[](#%E6%89%B9%E5%A4%84%E7%90%86%E7%BB%9F%E8%AE%A1%E5%88%86%E6%9E%90)批处理统计分析

[](#%E4%BA%A7%E5%93%81%E9%94%80%E5%94%AE%E6%97%A5%E5%BF%97--%E6%89%B9%E5%A4%84%E7%90%86%E7%BB%9F%E8%AE%A1%E5%88%86%E6%9E%90%E8%AE%A1%E7%AE%97)产品销售日志 批处理统计分析计算

产品各分类订单数(按天),hive sql:

  • select categoryid,saledatetime,sum(buycount) from product group by categoryid,saledatetime order by saledatetime;

产品各分类订单数(按天,指定某天,用于增量定时任务导出统计)

  • select categoryid,saledatetime,sum(buycount) from product group by categoryid,saledatetime having saledatetime="2020-12-30" order by saledatetime ;

其他分析查询SQL略,按天统计的数据都有了,按周、月、季、年就以此聚合。

导出结果到本地文件,相同记录则覆盖

use default;
-- Save to [LOCAL]
INSERT OVERWRITE LOCAL DIRECTORY '/home/product_order_count_by_cate'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
-- SQL
select categoryid,saledatetime,sum(buycount) from product group by categoryid,saledatetime order by saledatetime;

导出结果到HDFS,相同记录则覆盖

use default;
-- Save to HDFS
INSERT OVERWRITE DIRECTORY '/home/product_order_count_by_cate'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS TEXTFILE
-- SQL
select categoryid,saledatetime,sum(buycount) from product group by categoryid,saledatetime order by saledatetime;

执行完之后可以查看hdfs的记录是否已经保存

  • hadoop fs -tail /home/product_order_count_by_cate/000000_0

hivejobtohdfs

[](#%E8%8A%82%E7%9B%AE%E6%92%AD%E5%87%BA%E6%97%A5%E5%BF%97--%E6%89%B9%E5%A4%84%E7%90%86%E7%BB%9F%E8%AE%A1%E5%88%86%E6%9E%90%E8%AE%A1%E7%AE%97)节目播出日志 批处理统计分析计算

[](#%E6%89%B9%E5%A4%84%E7%90%86%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1)批处理定时任务

databand-job-springboot

databand-job-springboot:定时任务作业调度服务,支持Shell,Hadoop MR,HiveSQL,Python,Spark,Flink,JavaJar任务。

  • 注入见TaskConfig的方法scheduledTaskJobMap() 的例子,目前仅提供java注入,未来有数据库加载注入和配置文件注入

[](#%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%B1%BB%E5%9E%8B%E5%88%86%E4%B8%BAjobtype)定时任务类型分为:JobType:

  • 命令行任务,CommandExecuteJob的实例,
  • 原始记录备份(从本地),从数据源中备份原始数据到HDFS,HdfsBackupJob;
  • 原始记录备份(到本地),从HDFS数据源中备份原始数据到本地文件,HdfsToLocalFileJob;
  • Hive SQL任务,HiveSqlQueryJob,hive执行DQL查询任务,需要返回数据集,并对数据集进行分析数据库存储,存储的数据用于报表图表等展现,必须实现SavableTaskJob接口;
  • Hive SQL任务,HiveSqlExecuteJob,hive执行脚本任务,用于DDL、DML操作,比如load data等;
  • 统计分析计算,Hadoop中运行MR,执行处理,HadoopMRJob;
  • 更多任务类型,不一一列出。

其中每种类型都有针对各个统计指标的实例:JobInstances 和 JobType是多对一的关系。

运行方式:

3、启动单一任务,目前还没有统一的管理界面,未来会开发完善:

[](#%E6%B5%81%E6%95%B0%E6%8D%AE%E4%BB%BB%E5%8A%A1)流数据任务

databand-streamjob-springboot

databand-streamjob-springboot:流数据持久化任务

类型分为:JobType:

  • 原始记录备份,从数据源中备份原始数据到HDFS,HdfsBackupJob;
  • 流数据存储为MySQL记录(从kafka),KafkaToMysqlJob;
  • 流数据存储为ClickHouse记录(从kafka),KafkaToClickHouseJob;
  • 流数据存储为Kafka记录(从kafka),KafkaToKafkaJob;
  • 流数据存储为Elasticsearch记录(从kafka),KafkaToEsJob;

[](#%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E9%97%A8%E6%88%B7%E5%90%8E%E7%AB%AF%E7%AE%A1%E7%90%86%E5%92%8C%E5%89%8D%E7%AB%AF%E5%B1%95%E7%A4%BA%E5%B7%A5%E7%A8%8B-1)数据分析门户(后端管理和前端展示工程)

  • databand-admin-ui:前后端分离的纯前端UI工程,数据展现(目前未开发);
  • databand-admin-thymeleaf:后端权限、关系、站点配置管理(前后端不分离,正在开发的版本),基于若依框架;
  • databand-admin-api:数据api服务;
  • databand-admin-tools:BI工具集;
[](#%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8%E4%BA%8E2020-10-26%E6%9B%B4%E5%A4%9A%E5%B7%A5%E7%A8%8B%E6%AD%A3%E5%9C%A8%E5%BC%80%E5%8F%91%E4%B8%AD%E4%B8%8D%E5%AE%9A%E6%9C%9F%E6%9B%B4%E6%96%B0%E5%9B%A0%E4%B8%BA%E9%83%BD%E6%98%AF%E4%BD%BF%E7%94%A8%E4%B8%9A%E4%BD%99%E6%97%B6%E9%97%B4%E5%A6%82%E6%9B%B4%E6%96%B0%E7%A8%8D%E6%85%A2%E8%BF%98%E8%AF%B7%E8%B0%85%E8%A7%A3%E4%BD%86%E8%BF%99%E4%B8%AA%E5%B7%A5%E7%A8%8B%E4%B8%80%E5%AE%9A%E4%B8%8D%E4%BC%9A%E6%98%AF%E7%83%82%E5%B0%BE%E5%B7%A5%E7%A8%8B%E9%95%BF%E6%9C%9F%E6%9B%B4%E6%96%B0%E7%BB%B4%E6%8A%A4%E6%9C%AC%E4%BA%BA%E7%9A%84%E5%B7%A5%E4%BD%9C%E9%87%8D%E5%BF%83%E9%A2%86%E5%9F%9F%E4%B9%9F%E6%98%AF%E5%A4%A7%E6%95%B0%E6%8D%AE)项目启动于2020-10-26...更多工程正在开发中,不定期更新,因为都是使用业余时间,如更新稍慢还请谅解,但这个工程一定不会是烂尾工程,长期更新维护,本人的工作重心领域也是大数据。

原网址: 访问
创建于: 2021-03-03 14:03:31
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论