偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ClickHouse在京東小程序自定義數(shù)據(jù)分析中的應(yīng)用與實(shí)踐

云計(jì)算
京東小程序數(shù)據(jù)中心已涵蓋用戶行為分析、留存分析、用戶畫像及來源分析等四大基礎(chǔ)數(shù)據(jù)分析模塊,涉及的數(shù)據(jù)指標(biāo)多達(dá)60+。

一、 業(yè)務(wù)背景

隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,小程序作為當(dāng)下零售環(huán)境下的嶄新載體,它憑借著入口豐富、場(chǎng)景多元、傳播能力強(qiáng)、觸手可及以及用完即走的特點(diǎn),得到了廣泛的認(rèn)可和傳播。而在小程序的日常運(yùn)營與發(fā)展中,存在著多樣的數(shù)據(jù)信息,面對(duì)如此豐富的數(shù)據(jù)生產(chǎn)資料,如何高效靈活地對(duì)這些原始數(shù)據(jù)進(jìn)行分析與挖掘,迅速掌握小程序數(shù)據(jù)的波動(dòng),洞察小程序用戶行為變化,是目前國內(nèi)各個(gè)小程序平臺(tái)不斷追求突破的問題。因?yàn)橹挥胁粩嗵岣邤?shù)據(jù)的分析效率,才能更好地沉淀數(shù)據(jù)分析的能力,進(jìn)而借助于數(shù)據(jù)的深層潛在價(jià)值為小程序的業(yè)務(wù)發(fā)展而賦能。

京東小程序數(shù)據(jù)中心已涵蓋用戶行為分析、留存分析、用戶畫像及來源分析等四大基礎(chǔ)數(shù)據(jù)分析模塊,涉及的數(shù)據(jù)指標(biāo)多達(dá)60+。

早期的數(shù)據(jù)主要由京東小程序客戶端引擎SDK進(jìn)行采集,通過子午線原生渠道進(jìn)行統(tǒng)一上報(bào),再由服務(wù)端統(tǒng)一清洗處理;這種模式雖然可以覆蓋大部分基礎(chǔ)數(shù)據(jù)分析的場(chǎng)景,但是仍然存在如下痛點(diǎn)問題:

1、數(shù)據(jù)類型不完整:基礎(chǔ)數(shù)據(jù)指標(biāo)僅為小程序框架可以獲取的數(shù)據(jù),而小程序內(nèi)開發(fā)者自有代碼的頁面曝光、點(diǎn)擊等業(yè)務(wù)數(shù)據(jù),小程序框架無法自動(dòng)獲取,導(dǎo)致小程序數(shù)據(jù)平臺(tái)提供數(shù)據(jù)的完整性無法得到保證。例如,針對(duì)ISV商家開發(fā)的某營銷類小程序,我們無法采集并分析到該小程序在進(jìn)行營銷活動(dòng)時(shí),某一個(gè)領(lǐng)券按鈕的用戶點(diǎn)擊數(shù)據(jù)。

2、行業(yè)數(shù)據(jù)無法沉淀:小程序涵蓋的業(yè)務(wù)場(chǎng)景豐富多樣,且復(fù)雜程度不一,早期的數(shù)據(jù)中心,僅提供后置的數(shù)據(jù)分析展示,因?yàn)闃I(yè)務(wù)數(shù)據(jù)缺失,無法提供基于行業(yè)的預(yù)測(cè)分析模型,很難為商家提供更為有效的經(jīng)營指導(dǎo)策略支持。

3、無法滿足多變的數(shù)據(jù)統(tǒng)計(jì)需要:目前已有的數(shù)據(jù)分析是固化的、預(yù)置的且不可變的,自定義數(shù)據(jù)分析能真正支持?jǐn)?shù)據(jù)的靈活統(tǒng)計(jì)需要,滿足多變的業(yè)務(wù)數(shù)據(jù)分析場(chǎng)景。

以上問題的關(guān)鍵,在于如何解決未來海量業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)、靈活處理及深度分析,基于此,我們調(diào)研了行業(yè)內(nèi)多家成熟數(shù)據(jù)解決方案,重點(diǎn)考慮京東業(yè)務(wù)特點(diǎn),最終構(gòu)造了一套完整的京東小程序自定義數(shù)據(jù)分析服務(wù)。

接下來,本文將詳細(xì)介紹京東小程序自定義數(shù)據(jù)分析服務(wù)的整體技術(shù)方案和關(guān)鍵流程,重點(diǎn)涵蓋動(dòng)態(tài)規(guī)則配置解析、數(shù)據(jù)存儲(chǔ)設(shè)計(jì)以及實(shí)時(shí)數(shù)據(jù)查詢分析等功能的設(shè)計(jì)和實(shí)現(xiàn)。

二、 技術(shù)選型

京東小程序的自定義數(shù)據(jù)分析需要一種支持海量數(shù)據(jù)存儲(chǔ)、查詢高效且運(yùn)維成本較低的數(shù)據(jù)存儲(chǔ)方式,經(jīng)過調(diào)研對(duì)比發(fā)現(xiàn),ClickHouse以下的三點(diǎn)特征可以很好地滿足我們的技術(shù)選型訴求。

1、支持列式存儲(chǔ)和數(shù)據(jù)壓縮

京東小程序自定義數(shù)據(jù)分析需要滿足用戶在系統(tǒng)查詢分析時(shí)的查詢執(zhí)行效率,我們期望在百億數(shù)據(jù)集中,秒級(jí)返回執(zhí)行的自定義數(shù)據(jù)分析的聚合結(jié)果,對(duì)比發(fā)現(xiàn),ClickHouse按列存儲(chǔ)的特性便可以極大提升數(shù)據(jù)查詢的效率,因?yàn)榘戳写鎯?chǔ)與按行存儲(chǔ)相比,前者可以有效減少查詢時(shí)所需掃描的數(shù)據(jù)量,如果數(shù)據(jù)按行存儲(chǔ),數(shù)據(jù)庫首先會(huì)逐行掃描,并獲取每行數(shù)據(jù)的所有字段,再從每一行數(shù)據(jù)中返回查詢所需要的字段,導(dǎo)致會(huì)掃描所有的字段。如果數(shù)據(jù)按列組織,數(shù)據(jù)庫可以直接獲取想查詢的列的數(shù)據(jù),從而避免了多余的數(shù)據(jù)行掃描。

針對(duì)分析類查詢,通常只需要讀取表的一小部分列。在列式數(shù)據(jù)庫中你可以只讀取你需要的數(shù)據(jù)。例如,如果只需要讀取100列中的5列,這將幫助你最少減少20倍的I/O消耗。

ClickHouse采用的壓縮算法可以將列的數(shù)據(jù)進(jìn)行壓縮處理,數(shù)據(jù)中的重復(fù)項(xiàng)越多,則壓縮率越高;壓縮率越高,則數(shù)據(jù)體量越小;而數(shù)據(jù)體量越小,則數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸越快,對(duì)網(wǎng)絡(luò)帶寬和磁盤I/O的壓力也就會(huì)進(jìn)一步地變小。

2、MPP架構(gòu),支持分布式水平拓展

京東小程序自定義數(shù)據(jù)分析服務(wù)需要支持水平的拓展。因?yàn)殡S時(shí)業(yè)務(wù)的發(fā)展,小程序的數(shù)據(jù)量勢(shì)必會(huì)日益龐大,調(diào)研發(fā)現(xiàn),ClickHouse天然具備分布式存儲(chǔ)的特點(diǎn),它本身是一款MPP(Massively Parallel Processing)架構(gòu)的列式存儲(chǔ)數(shù)據(jù)庫,支持大規(guī)模并行處理,以多主對(duì)等的扁平架構(gòu),保證了海量數(shù)據(jù)在各個(gè)節(jié)點(diǎn)的分布式存儲(chǔ)。

這樣對(duì)于我們后期的業(yè)務(wù)數(shù)據(jù)的拓展存儲(chǔ)提供了必要的保障,只需簡單增加節(jié)點(diǎn),即可實(shí)現(xiàn)水平擴(kuò)容,極大地降低了運(yùn)維的成本。

在ClickHouse中,數(shù)據(jù)可以保存在不同的shard上,每一個(gè)shard都由一組用于容錯(cuò)的replica組成,查詢可以并行地在所有shard上進(jìn)行處理,如下圖Node1和Node2均為主shard,互為replicate,然而這些對(duì)用戶來說完全是透明的。

3、多樣化的表存儲(chǔ)引擎

京東小程序自定義數(shù)據(jù)分析的場(chǎng)景較多,涉及點(diǎn)擊、瀏覽、曝光和訂單等四大類分析場(chǎng)景,每種場(chǎng)景都有獨(dú)特且常見的統(tǒng)計(jì)需要,比如常見的計(jì)算去重用戶數(shù)、求和金額、求金額平均值或最大值等,而在ClickHouse中可以針對(duì)表設(shè)置對(duì)應(yīng)的表引擎,表引擎決定了表存儲(chǔ)在哪里、以何種方式進(jìn)行存儲(chǔ)以及支持的查詢方式。同時(shí),表引擎可以結(jié)合ClickHouse的物化視圖使用,能夠達(dá)到非常好的查詢效果。

ClickHouse共擁有合并樹、內(nèi)存、文件、接口和其他6大類20多種表引擎。其中每一種表引擎都有著各自的特點(diǎn)和適用的場(chǎng)景,對(duì)于簡單的場(chǎng)景,可直接使用簡單的引擎降低運(yùn)維成本,而復(fù)雜的場(chǎng)景也有合適的選擇。

比如,MergeTree家族的ReplacingMergeTree引擎,它會(huì)刪除排序鍵值相同的重復(fù)項(xiàng)。數(shù)據(jù)的去重只會(huì)在數(shù)據(jù)合并期間進(jìn)行,合并會(huì)在后臺(tái)一個(gè)不確定的時(shí)間進(jìn)行,因此你無法預(yù)先作出計(jì)劃。因此,ReplacingMergeTree 適用于在后臺(tái)清除重復(fù)的數(shù)據(jù)以節(jié)省空間,但是它不保證沒有重復(fù)的數(shù)據(jù)出現(xiàn)。

SummingMergeTree會(huì)把行主鍵相同的行合并為一行,計(jì)算求和值,該行包含了被合并的行中具有數(shù)值數(shù)據(jù)類型的列的匯總值。

AggregatingMergeTree在合并分區(qū)的時(shí)候按照定義的條件聚合數(shù)據(jù),將需要聚合的數(shù)據(jù)預(yù)先計(jì)算出來,在聚合查詢時(shí)直接使用結(jié)果數(shù)據(jù)。

三、 京東小程序自定義數(shù)據(jù)分析的整體架構(gòu)

了解了ClickHouse相關(guān)特性后,接下來介紹完整的京東小程序自定義數(shù)據(jù)分析的技術(shù)方案。

整體的自定義數(shù)據(jù)分析功能主要包含自定義數(shù)據(jù)上報(bào)、數(shù)據(jù)加工計(jì)算以及數(shù)據(jù)存儲(chǔ)三大層次結(jié)構(gòu)。其中最核心的問題是上報(bào)的數(shù)據(jù)如何基于自定義的配置規(guī)則進(jìn)行匹配關(guān)聯(lián)查詢。而解決辦法是在上報(bào)的數(shù)據(jù)記錄中可以采用一個(gè)event_id(事件id)來標(biāo)識(shí)某次上報(bào)請(qǐng)求數(shù)據(jù),然后將業(yè)務(wù)字段放在map結(jié)構(gòu)中,如下數(shù)據(jù)結(jié)構(gòu)所示,這樣可以實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)字段的橫向拓展,又能輕松定位到上報(bào)的數(shù)據(jù)記錄。

上報(bào)數(shù)據(jù)的通道主要包括網(wǎng)關(guān)http實(shí)時(shí)數(shù)據(jù)通道以及子午線客戶端埋點(diǎn)通道,將這些數(shù)據(jù)統(tǒng)一下發(fā)至實(shí)時(shí)數(shù)倉或者HDFS離線數(shù)倉。

通過中間層的數(shù)據(jù)流轉(zhuǎn),執(zhí)行Flink實(shí)時(shí)計(jì)算或者M(jìn)apReduce的離線計(jì)算,從而對(duì)原始的上報(bào)數(shù)據(jù)進(jìn)行過濾、加工計(jì)算,最終批量寫入至ClickHouse來實(shí)現(xiàn)數(shù)據(jù)的最終持久化存儲(chǔ)。

至此,可以基于前端界面上配置的自定義事件和查詢指標(biāo)、過濾條件、分組條件等自定義查詢規(guī)則,實(shí)現(xiàn)數(shù)據(jù)的在線查詢分析。效果展示如下圖所示。

四、 京東小程序自定義數(shù)據(jù)分析的流程設(shè)計(jì)

那么,規(guī)則引擎服務(wù)如何基于自定義規(guī)則動(dòng)態(tài)解析處用戶上報(bào)的數(shù)據(jù)的呢?規(guī)則引擎的執(zhí)行流程主要包含兩部分,包含自定義數(shù)據(jù)上報(bào)屬性的配置寫入以及自定義數(shù)據(jù)分析兩個(gè)核心流程。

首先,需要將上報(bào)的屬性配置保存至數(shù)據(jù)庫進(jìn)行持久化存儲(chǔ),當(dāng)進(jìn)行實(shí)時(shí)數(shù)據(jù)查詢時(shí),會(huì)先獲取以上的事件規(guī)則和指標(biāo),之后,規(guī)則引擎會(huì)構(gòu)建查詢sql腳本推送至執(zhí)行引擎,執(zhí)行引擎下發(fā)sql腳本至ClickHouse集群去執(zhí)行數(shù)據(jù)的查詢并返回結(jié)果至前端,最后,異步將執(zhí)行結(jié)果寫入緩存,并設(shè)置數(shù)據(jù)有效期,便于提升下次查詢效率。整體的解析執(zhí)行流程如下圖所示。

五、 京東小程序自定義數(shù)據(jù)分析的表設(shè)計(jì)

ClickHouse的表分為本地表和分布式表,分布式表是一個(gè)邏輯上的表, 可以理解為數(shù)據(jù)庫中的視圖, 一般查詢都查詢分布式表。分布式表引擎會(huì)將我們的查詢請(qǐng)求路由本地表進(jìn)行查詢, 然后進(jìn)行匯總最終返回給用戶。本地表是實(shí)際存儲(chǔ)數(shù)據(jù)的表,本地表和分布式表的關(guān)系如下圖所示,在寫入和讀取數(shù)據(jù)時(shí)通過nginx實(shí)現(xiàn)請(qǐng)求的負(fù)載均衡,防止出現(xiàn)寫入和讀取不均衡的情況。

以京東小程序自定義點(diǎn)擊事件的數(shù)據(jù)統(tǒng)計(jì)場(chǎng)景為例,我們創(chuàng)建對(duì)應(yīng)的本地表vapp_analysis_local和分布式表vapp_analysis_dist如下圖所示。

本地表:

分布式表:

舉例說明,根據(jù)京東小程序點(diǎn)擊事件的數(shù)據(jù)存儲(chǔ)特點(diǎn),我們做了如下的表設(shè)計(jì):

  • 設(shè)置主節(jié)點(diǎn)數(shù)和副本數(shù)。shard屬性設(shè)置節(jié)點(diǎn)的主數(shù)據(jù)節(jié)點(diǎn)數(shù),replica設(shè)置節(jié)點(diǎn)的副本數(shù),從而保證數(shù)據(jù)存儲(chǔ)的多副本高可用。
  • 選擇分區(qū)字段。ClickHouse支持分區(qū),分區(qū)字段是每張表整個(gè)數(shù)據(jù)目錄最外層結(jié)構(gòu),可以很大程度加快查詢速度。具體的DDL操作關(guān)鍵詞是 PARTITION BY,指的是一個(gè)表按照某一列數(shù)據(jù)(比如日期)進(jìn)行分區(qū),對(duì)應(yīng)到最終的結(jié)果就是不同分區(qū)的數(shù)據(jù)會(huì)寫入不同的文件中,在我們的業(yè)務(wù)場(chǎng)景中是按照數(shù)據(jù)的上報(bào)時(shí)間取年、月、日按照天來進(jìn)行分區(qū)的,toYYYYMMDD(report_time)。
  • 設(shè)置排序規(guī)則。設(shè)置合理的數(shù)據(jù)排序規(guī)則可以提升數(shù)據(jù)的查詢效率,數(shù)據(jù)會(huì)按照設(shè)置的排序字段先后順序來進(jìn)行存儲(chǔ),在進(jìn)行聚合計(jì)算時(shí)也會(huì)按照聚合條件對(duì)相鄰數(shù)據(jù)進(jìn)行計(jì)算。在我們的業(yè)務(wù)場(chǎng)景中采用的是小程序的AppID來作為排序的規(guī)則,小程序AppID是每個(gè)小程序的唯一標(biāo)識(shí),在查詢數(shù)據(jù)時(shí)絕大部分場(chǎng)景會(huì)以AppID的維度進(jìn)行數(shù)據(jù)的查詢。所以,采用AppID作為排序字段可以很大程度上提升我們的數(shù)據(jù)聚合運(yùn)算效率。
  • 設(shè)置表引擎。在點(diǎn)擊事件的場(chǎng)景中,我們?cè)O(shè)置的支持多副本的ReplicatedMergeTree引擎,可以支持?jǐn)?shù)據(jù)的多副本存儲(chǔ),保證數(shù)據(jù)的高可用。

在以上的表設(shè)計(jì)中,content字段非常關(guān)鍵。我們將上報(bào)的自定義數(shù)據(jù)存儲(chǔ)到表中的content字段中,并以json結(jié)構(gòu)進(jìn)行存儲(chǔ),這樣即可支持上報(bào)字段的水平拓展。當(dāng)規(guī)則引擎將動(dòng)態(tài)生成的sql腳本下發(fā)至Clickhouse執(zhí)行查詢時(shí),利用Clickhouse的json解析函數(shù)JSONExtractString進(jìn)行取值轉(zhuǎn)換,這樣就可以非常容易得到我們想要分析的指定的業(yè)務(wù)字段。

舉例說明,當(dāng)我們想從京東小程序點(diǎn)擊事件表中獲取事件編碼為applets_buy的金額字段amount時(shí),基于規(guī)則解析引擎構(gòu)建并下發(fā)至ClickHouse的動(dòng)態(tài)腳本即為如下形式,這樣便可實(shí)現(xiàn)上報(bào)字段的動(dòng)態(tài)提取。

六、 京東小程序自定義數(shù)據(jù)分析的監(jiān)控

在整個(gè)自定義數(shù)據(jù)分析的鏈路中,涉及的環(huán)節(jié)較多,需要有良好的監(jiān)控機(jī)制,來保證系統(tǒng)功能的穩(wěn)定運(yùn)行。

針對(duì)MQ消息隊(duì)列、Flink實(shí)時(shí)計(jì)算任務(wù)、ClickHouse存儲(chǔ)等中間件的監(jiān)控,我們采取的是Grafana提供的可視化監(jiān)控能力。如下圖所示,這樣可以直觀地看到諸如CPU、內(nèi)存、磁盤的I/O、磁盤使用率等情況。

同時(shí),針對(duì)京東小程序運(yùn)行時(shí)的監(jiān)控,我們提供了一套完整的監(jiān)控告警機(jī)制,支持配置自定義告警規(guī)則,來幫助我們及時(shí)發(fā)現(xiàn)京東小程序自身異常頁面數(shù)據(jù)、性能數(shù)據(jù)以及網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)等異常數(shù)據(jù)信息,目前已可以監(jiān)控到線上所有小程序的異常數(shù)據(jù)和性能運(yùn)行情況,以單個(gè)小程序?yàn)槔?,監(jiān)控的情況如下圖所示。

基于以上兩種監(jiān)控手段,可以幫忙我們時(shí)刻掌握京東小程序在整個(gè)鏈路中的性能數(shù)據(jù)的波動(dòng)、及時(shí)發(fā)現(xiàn)性能瓶頸、迅速定位運(yùn)行中出現(xiàn)的各種問題,從而為整個(gè)京東小程序的業(yè)務(wù)發(fā)展保駕護(hù)航。

七、 總結(jié)展望

京東小程序自定義數(shù)據(jù)分析服務(wù)所提供的高效靈活的處理能力,不僅極大地提高了京東小程序數(shù)據(jù)平臺(tái)的完整性,也為持續(xù)沉淀行業(yè)業(yè)務(wù)數(shù)據(jù)提供了完善的保障,預(yù)計(jì)首批落地支持50+核心小程序的業(yè)務(wù)自定義數(shù)據(jù)上報(bào)、分析及可視化,完整串聯(lián)用戶在小程序內(nèi)外的行為路徑,支持商家精細(xì)化運(yùn)營的需要。

京東小程序數(shù)據(jù)能力已經(jīng)完成了從0到1的突破,未來將會(huì)致力于打造京東小程序智能數(shù)據(jù)分析模型,從而實(shí)現(xiàn)從1到N的飛躍。最終幫助更多京東小程序商家不斷優(yōu)化運(yùn)營策略,降低數(shù)據(jù)分析成本,提升業(yè)務(wù)產(chǎn)能及效率!

責(zé)任編輯:未麗燕 來源: 京東零售云
相關(guān)推薦

2022-05-06 12:01:01

優(yōu)化小程序

2022-06-30 09:30:36

FlinkSQL流批一體京東

2018-11-05 09:00:13

蘇寧易購數(shù)據(jù)分析

2023-06-27 15:02:47

2024-11-25 08:50:24

2020-11-03 08:21:23

小程序

2022-12-07 08:31:45

ClickHouse并行計(jì)算數(shù)據(jù)

2017-05-18 12:36:16

android萬能適配器列表視圖

2016-11-04 10:47:51

微信小程序

2021-04-28 09:08:23

Kotlin協(xié)程代碼

2022-04-02 09:57:51

技術(shù)京東實(shí)踐

2017-05-19 10:03:31

AndroidBaseAdapter實(shí)踐

2023-12-21 09:00:21

函數(shù)React 組件useEffect

2019-06-19 16:01:14

Spark數(shù)據(jù)分析SparkSQL

2022-06-06 09:01:16

SwiftUI自定義導(dǎo)航

2010-08-12 09:45:33

jQuery自定義事件

2016-12-07 15:40:42

谷歌數(shù)據(jù)分析Airbnb

2019-05-05 09:03:06

HBase大數(shù)據(jù)存儲(chǔ)數(shù)據(jù)存儲(chǔ)

2020-03-02 14:49:09

數(shù)據(jù)分析數(shù)據(jù)采集數(shù)據(jù)處理

2009-08-04 13:41:31

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)