温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

大数据开发中统计系统设计的方法是什么

发布时间:2021-12-31 14:38:41 来源:亿速云 阅读:139 作者:iii 栏目:大数据

本篇内容主要讲解“大数据开发中统计系统设计的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“大数据开发中统计系统设计的方法是什么”吧!

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即可

到此,相信大家对“大数据开发中统计系统设计的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI