大数据开发-实时范围-统计系统设计(代码片段)

Hoult-吴邪 Hoult-吴邪     2022-12-06     341

关键词:

1.背景

在大数据生产环境下,往往需求是越快越好,对于实时系统开发,需求往往是一个状态值,比如多少次,多少个,而对于离线数据开发,因为不是实时,所以可以开发各种复杂需求,另外一种基于Lambda架构或者Kappa架构的,往往场合时实时统计系统,实时统计系统在前面Lambda架构的设计中已经谈过,本文时另外一种更复杂的应用场景,对于Lambda架构中产生的流水,要尽可能快地满足范围查询,什么意思呢,Lambda架构中,虽说可以查询一个范围统计的流水,但是为了尽可能地快,将离线计算结果是count,count(distinct) 这两种可以更细地划分,做初步的聚合,比如生成一个Set的集合,这样可以满足在查询层更快地合并数据,但是同时也增加了架构的复杂性和非通用性,同理本文的实时范围查询,是基于需求的一种复杂设计,解决的是这样的一个问题,我想求一段范围的count,怎么保证最快地计算结果。

## 原始数据表t1流水如下
transactionId,id1,id2,money,create_time
## 目的
## 输入id1, 一段范围create_time, 得到count(money) 

2.设计

前面背景中主要抛出一个问题,如何设计这样的系统,满足快速求时间范围的count, 需要达到生产级别的实时查询系统。

(1)为了快速count,必然不能只有流水,只有流水的count,遇到数据量大的范围count,很耗时,所以设计预计算count,即截至到xx,某个id的所有count(money)

(2) 在查询时候只需要查到开始时间的最左时间流水,和结束时间的右逼近流水,相减即可

(3)为了快速查询时间和id,必然需要这两个加索引

(4)如果需求是最近三个月的查询,那么回溯时候,可以认为设计开始时间节点,从那里开始时0,然后开始不断累加

注意:(4)看应用需求,可以将最原始节点卡在三个月前,令那个时间点的截至数据count就是0

示意图如下:

3.实现方案

假设是(3)方案,更通用的方案,就是数据会存的更多一点

假设原始全量数据存在于mysql表中,那么需要新建立一张t2表,字段如下:

id1,create_time, money_sum

(1)首次计算如下

SELECT id1,
       create_time,
       sum() over(PARTITION BY money_sum
                  ORDER BY create_time) AS money_sum
WHERE create_time > NOW

(2) 增量计算

## 查询t1一条增量记录
select id1,create_time,money from t1
## 查询 t2 这个id1的最近一条记录
SELECT id1,
       create_time,
       monye_sum + MONEY AS money_sum
FROM
  (SELECT id1,
          create_time,
          money_sum,
          row_number() over(PARTITION BY id1
                            ORDER BY create_time DESC) r
   FROM t2
   WHERE id1 = xx )
WHERE r=1
## 将这条记录insert到t2即可 

4.总结 && 探讨

如果数据有同一时间的多条记录怎么办,如果重复记录有延迟怎么办

针对第一个问题,如果有多条重复记录,就要看业务需求了,业务需求如果一定要精准实时的,那么必须要等下个时间的数据过来或者确定统计结束,才能将money加上,就是3.(2)中的select xx from t1可能有多条数据的情况,一定要确保这个id不会有同一重复的记录才行,这时候就有两种处理方式,一种是默认等1s,如果没有新数据就结束,另外一种是等新时间点数据,如果来了就算结束,如果业务需求可以接受延迟,那么同样的数据,不同的查询时间点可能就会有不同的结果。

所以真的要看业务需求来看设计方式,比较常见的方式是延迟等待,没有新时间就计算。


吴邪,小三爷,混迹于后台,大数据,人工智能领域的小菜鸟。 更多请关注 ![file](https://img-blog.csdnimg.cn/20210411231445101.png)

大数据大数据-实时统计分析-方案选型

大数据-实时统计分析-方案选型image2017-10-27_11-10-53.png(1067×738)elasticsearch-headElasticsearch-sqlclientsparkstreamingreload_百度搜索基于sparkstreaming的网管系统告警过滤算法的设计与实现-其它论文-道客巴巴scala-SparkStreamingintoHBasewithfilte 查看详情

毕业设计-题目:基于大数据的疫情数据分析及可视化系统(代码片段)

文章目录1前言2开发简介3数据集weibo.json新浪微博实时热搜前50的数据ProvinceData.json省市疫情详情4实现技术4.1系统架构4.2开发环境4.3疫情地图4.3.1填充图(Choroplethmaps)4.3.2气泡图4.4全国疫情实时追踪4.6其他页面5关键代码1前言Hi,... 查看详情

大数据spark实时搜索日志实时分析(代码片段)

目录1业务场景2初始化环境2.1创建Topic2.2模拟日志数据2.3StreamingContextUtils工具类3实时数据ETL存储4实时状态更新统计4.1updateStateByKey函数4.2mapWithState函数5实时窗口统计1业务场景百度搜索风云榜(http://top.baidu.com/)以数亿网... 查看详情

bi智能标签实时大数据分析

...工具是帮助用户直接产生需要的统计图表,而SunlightDB数据库BI智能标签,是帮助那些有BI系统开发,定制化需求的用户,这些用户不仅仅需要的是一张统计图,他们需要的是统计图背后的代码程序,这些动... 查看详情

电影推荐系统(037~039)

文章目录项目系统设计项目框架大数据处理流程系统模块设计项目系统架构系统数据流图数据源解析主要数据模型统计推荐模块离线推荐模块(基于隐语义模型推荐)ALS推荐模型训练计算用户推荐列表计算电影相似度矩阵基于模型... 查看详情

大数据学习——sparkstreaming整合kafka完成网站点击流实时统计(代码片段)

1.安装并配置zk2.安装并配置Kafka3.启动zk4.启动Kafka5.创建topic[[email protected]kafka]#bin/kafka-console-producer.sh--broker-listmini1:9092--topiccyf-test 程序代码packageorg.apache.sparkimportjava.net.InetSocket 查看详情

flink实时计算pvuv的几种方法(代码片段)

本文首发于:Java大数据与数据仓库,Flink实时计算pv、uv的几种方法实时统计pv、uv是再常见不过的大数据统计需求了,前面出过一篇SparkStreaming实时统计pv,uv的案例,这里用Flink实时计算pv,uv。我们需要统计不同数据类型每天的pv,... 查看详情

apachestrom实时计算系统(代码片段)

ApacheStrom实时计算系统Storm简介ApacheStorm是一个分布式大数据实时计算系统,Storm设计用于在容错和水平可拓展方法中实时处理大数据,是一个数据流框架,可以使用Storm并行的对实时数据执行各种操作。相比于Hadoop的... 查看详情

druid(准)实时分析统计数据库——列存储+高效压缩

...uid是一个开源的、分布式的、列存储系统,特别适用于大数据上的(准)实时分析统计。且具有较好的稳定性(HighlyAvailable)。其相对比较轻量级,文档非常完善,也比较容易上手。Druidvs其他系统DruidvsImpala/SharkDruid和Impala、Shark... 查看详情

druid介绍(代码片段)

Druid(大数据实时统计分析数据存储) Druid 是一个为在大数据集之上做实时统计分析而设计的开源数据存储。这个系统集合了一个面向列存储的层,一个分布式、shared-nothing的架构,和一个高级的索引结构,来达成在秒级以... 查看详情

spark作业--实时分析springboot日志(代码片段)

...务器性能比较差,就设计了如下架构。功能与设计(大数据集群+架构设计+功能分析与设计)总体架构图功能:订单成交量统计分析历史成交总金额热门分类的实时和离线统计分析热门商品的实时和离线统计分析活跃... 查看详情

设计一个前端统计sdk(代码片段)

...事件(如统计一个按钮被点击了多少次)-性能-错误统计数据的流程(只做前端SDK,但是要了解全局)-前端发送统计数据给服务端-服务端接受,并处理统计数据-查看统计结果代码<!DOCTYPEhtml><htmllang="en"><head><metacha... 查看详情

eclipse连接hadoop并实现词频统计(大数据分析)(代码片段)

1、简介Eclipse是一个集成开发环境(IDE),包含一个基工作区和定制环境的可扩展插件系统。大部分使用Java编写,Eclipse可以用来开发应用程序。通过各种插件,Eclipse也可以用于其他编程语言开发应用程序࿱... 查看详情

寻找海量数据集用于大数据开发实战(维基百科网站统计数据)(代码片段)

...计文本文件中的单词出现次数),我们也在寻找其他海量数据来做更多实战以提高自己,今天介绍的是一个海量数据集的下载方法,以及数据内容的简介;关于维基百科网站统计数据数据的下载页面地址:https://dumps.wikimedia.org/ot... 查看详情

浅谈分布式计算的开发与实现(代码片段)

实时计算接上篇,离线计算是对已经入库的数据进行计算,在查询时对批量数据进行检索、磁盘读取展示。而实时计算是在数据产生时就对其进行计算,然后实时展示结果,一般是秒级。举个例子来说,如果有个大型网站,要实... 查看详情

apachestrom实时计算系统(代码片段)

ApacheStrom实时计算系统Storm简介ApacheStorm是一个分布式大数据实时计算系统,Storm设计用于在容错和水平可拓展方法中实时处理大数据,是一个数据流框架,可以使用Storm并行的对实时数据执行各种操作。相比于Hadoop的... 查看详情

hyperloglog算法在uv实时统计中的应用(代码片段)

...到集合中,每次有新访客,就把向集合新增元素。但是当数据量千万级别的时候,无论是内存中,还是redis等外部系统中,集合新增元素的效率都很低。2HyperLoglog在不追求绝对准确的情况下,使用概率算法算是一个不错的解决方... 查看详情

社区疫情|基于springcloudalibaba的社区疫情管理平台设计与实现(代码片段)

...方式转变为更智能化的计算机方式,由效率低,数据冗余大的纸质统计转变为检索迅速、查找便捷、信息存储量大以及实时化的数据统计,最重要的是解决了“零”接触的问题,避免了社区交叉感染,这些系... 查看详情