您好,登錄后才能下訂單哦!
本篇內容主要講解“大數據開發中統計系統設計的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“大數據開發中統計系統設計的方法是什么”吧!
在大數據生產環境下,往往需求是越快越好,對于實時系統開發,需求往往是一個狀態值,比如多少次,多少個,而對于離線數據開發,因為不是實時,所以可以開發各種復雜需求,另外一種基于Lambda架構或者Kappa架構的,往往場合時實時統計系統,實時統計系統在前面Lambda架構的設計中已經談過,本文時另外一種更復雜的應用場景,對于Lambda架構中產生的流水,要盡可能快地滿足范圍查詢,什么意思呢,Lambda架構中,雖說可以查詢一個范圍統計的流水,但是為了盡可能地快,將離線計算結果是count,count(distinct) 這兩種可以更細地劃分,做初步的聚合,比如生成一個Set的集合,這樣可以滿足在查詢層更快地合并數據,但是同時也增加了架構的復雜性和非通用性,同理本文的實時范圍查詢,是基于需求的一種復雜設計,解決的是這樣的一個問題,我想求一段范圍的count,怎么保證最快地計算結果。
## 原始數據表t1流水如下 transactionId,id1,id2,money,create_time ## 目的 ## 輸入id1, 一段范圍create_time, 得到count(money)
前面背景中主要拋出一個問題,如何設計這樣的系統,滿足快速求時間范圍的count, 需要達到生產級別的實時查詢系統。
(1)為了快速count,必然不能只有流水,只有流水的count,遇到數據量大的范圍count,很耗時,所以設計預計算count,即截至到xx,某個id的所有count(money)
(2) 在查詢時候只需要查到開始時間的最左時間流水,和結束時間的右逼近流水,相減即可
(3)為了快速查詢時間和id,必然需要這兩個加索引
(4)如果需求是最近三個月的查詢,那么回溯時候,可以認為設計開始時間節點,從那里開始時0,然后開始不斷累加
注意:(4)看應用需求,可以將最原始節點卡在三個月前,令那個時間點的截至數據count就是0
示意圖如下:
假設是(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即可
到此,相信大家對“大數據開發中統計系統設計的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。