輕鬆存儲千億級數據,知乎基於Doris的DMP系統架構實踐

来源:https://www.cnblogs.com/88223100/archive/2023/04/27/Easy-storage-of-billions-of-data-Zhihu-DMP-system-architecture-practice-based-on-Doris.html
-Advertisement-
Play Games

1)提升查詢效率 自動探測 SQL 複雜查詢條件預先合併成一個派生特征的 bitmap,預測和圈人時對複雜條件 SQL 重寫為派生特征。 2)提升導入速度 Spark 直接寫 Doris Tablet 文件,並掛載到 FE。 針對大導入場景與 Doris 團隊共建,提升寫入效... ...


一、背景

 

1、DMP 業務

 

知乎業務中存在哪些問題需要解決?

 

為什麼要建立 DMP 平臺來解決這些問題?

 

圖片

 

2、DMP 業務流程

 

當前這些業務的運營流程是怎樣的?

 

DMP 如何與業務結合併賦能?

 

圖片

 

其中運營模式包含如下 3 類:

 

1)站內運營自閉環

 

  • 內容運營。拿內容找用戶,定向消費用戶,站內投放,分析效果和人群成分等。

     

  • 活動運營。拿活動找用戶,定向消費用戶,站內投放,分析效果和人群成分等。

     

  • 用戶運營。洞察用戶,分析。

 

2)站內向站外投放閉環

 

  • 增長投放。定向合適的人群,併在站外投放廣告,數據回收,效果分析。

 

3)站外向站內廣告閉環

 

  • 廣告投放。站外用戶導入,定向投放。或基於對目標群體的理解圈選定向投放。

 

圖片

 

3、DMP 畫像特征

 

當前有哪些畫像特征?

 

這些特征是如何分層分類的?

 

量級如何?

 

3 層級特征分類:

 

一級分類 (8 組) 

        二級分類 (40 組)

               標簽組(120 個) 

                       性別、手機品牌、話題興趣…

               標簽(250 萬) 

                       男|女、 HUAWEI|Apple、對影視內容感興趣程度高…

 

二、架構與實現

 

1、DMP 功能梳理

 

DMP 通過設計哪些功能模塊,支持相應的業務流程?

 

圖片

 

2、DMP 架構

 

DMP 通過設計哪些功能模塊,支持相應的業務流程?

 

圖片

 

架構設計重點是解決業務功能的實現複雜度,同時架構設計也是明確模塊重心和設計目標的一種重要手段。拆分後,不同模塊都有不同的設計重心:

 

1)對外模塊。針對使用方定製設計。

 

  • DMP 介面:高穩定性、高併發高吞吐

     

  • DMP 前臺:操作簡單,低運營使用成本

     

  • DMP 後臺:日常開發工作配置化,降低開發成本

 

2)業務模塊。以可擴展為第一要務。

 

  • 人群圈選:可擴展。新增特征 0 成本,新增規則低成本。

     

  • 人群洞察:可擴展。新增特征 0 成本,新增洞察方式低成本。

     

  • 人群泛化:可擴展。新增泛化方式低成本。

 

3)業務支持模塊。線性水平擴展及屏蔽內部邏輯。

 

  • 特征生產:擴展成本低。原子特征低成本生產,派生特征通過後臺可配置

     

  • ID Mapping:屏蔽 ID 打通邏輯

     

  • 計算任務運維:屏蔽機器資源和任務依賴的邏輯

     

  • 存儲:可擴展可持續,不因業務成長而導致成本大幅增加

 

3、DMP 平臺功能盤點

 

圖片

 

DMP 上線至今支持了:

 

  • 5+ 萬人群定向

  • 400+ 次人群洞察

  • 60+ 次人群泛化

 

數據量級:

 

  • 120 個標簽組

  • 250 萬個標簽

  • 1100 億條用戶 x 標簽的數據

 

圖片

 

數據量級:

 

  • 每日 2.x TB 共 5 日 11 TB(離線、實時)特征(Doris)

 

  • 120 個離線生產任務和 5 個實時生產任務

 

  • 每日 6100 次人群預估,300 個人群圈選,1-2 個人群洞察,1 個人群泛化任務

 

4、特征數據鏈路及存儲

 

DMP 的批量、流式特征如何建設並落地到相應的存儲?

 

圖片

 

數據量級:

 

1)特征鏈路

 

  • 離線 Spark:Hive -> 特征抽取 -> 離線標簽 -> mapping -> Doris / ES / HDFS

 

  • 實時 Flink:Kafka -> 特征抽取 -> 實時標簽 -> mapping -> Doris / ES / HDFS

 

2)存儲

 

① Doris

 

  • 用戶 x 標簽:用戶有哪些標簽(1100 億)

 

  • id mapping:id 轉化寬表(8.5 億)

 

② ElasticSearch

 

  • 標簽枚舉表:標簽中文信息及搜索(250 萬)

 

5、人群定向流程

 

人群定向分哪幾個過程?怎麼做的?

 

圖片

 

子流程:標簽搜索、標簽選擇、人群預估、人群圈選

 

圖片

 

子流程:種子人群上傳、人群泛化

 

流程圖中主要介紹了:標簽搜索、標簽選擇、人群預估、人群圈選、種子人群上傳、人群泛化幾個子流程的執行過程。具體在業務上執行的人群定向流程很多,以下說幾種典型的:

 

  • 標簽加購物車 -> 圈選。

 

  • 傳種子人群 -> 泛化。

 

  • 歷史效果人群 -> 泛化 -> 疊加本次運營特點 -> 圈選。

 

  • 歷史效果人群 -> 洞察 -> 重新生成標簽關係 -> 圈選 -> 疊加歷史正向人群 -> 泛化 -> 限制分發條件 -> 圈選。

 

  • 對標簽、歷史人群進行組合、泛化、再限制條件再圈選、洞察,最後再調整等等。

 

三、難題及解決方案

 

圖片

 

在 DMP 業務中,我們主要遇到了人群定向方面的難題,難題的原因主要有:1、人群特征數量大(1200 億);2、時間要求低(人群預估 1 秒,圈選 1 分鐘)。

 

1、優化第一版

 

倒排、id mapping 以及查詢邏輯優化

 

圖片

 

圖片

 

圖片

 

2、優化第二版

 

分而治之

 

圖片

 

 

  • 將連續一塊的用戶 id 的不同 tag 的數據,都增加統一的 group 欄位進行分組。

 

  • 在 group 內完成交並差後,最後進行數據彙總。

 

  • 同時開啟多線程模式,提升每組的計算效率。

 

圖片

 

四、未來及展望

 

1、業務向

 

圖片

 

2、技術向

 

1)提升查詢效率

 

  • 自動探測 SQL 複雜查詢條件預先合併成一個派生特征的 bitmap,預測和圈人時對複雜條件 SQL 重寫為派生特征。

 

2)提升導入速度

 

  • Spark 直接寫 Doris Tablet 文件,並掛載到 FE。

 

  • 針對大導入場景與 Doris 團隊共建,提升寫入效率。

 

作者丨侯容

本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/Easy-storage-of-billions-of-data-Zhihu-DMP-system-architecture-practice-based-on-Doris.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文演示通過PowerShell+Docker Desktop for Windows 一鍵部署Sitecore10.3(即Sitecore最新版)Docker開發/測試/演示 環境。 官方參考 SitecoreXP 10.3.0 Developer Workstation Deployment W ...
  • (網路相關命令) 前言 這期呢主要說一說Linux中與網路相關命令,一共包含19個命令 測試主機之間網路是否聯通 1、簡介 ping 命令不管是在Windows還是Linux都是比較常用的命令。命令用於測試主機之間的網路連通性 2、語法格式 ping [參數選項] [目標主機] 3、參數說明 | 參 ...
  • 哈嘍大家好,我是鹹魚 今天我們來學習一下 Linux 操作系統核心之一:記憶體 跟 CPU 一樣,記憶體也是操作系統最核心的功能之一,記憶體主要用來存儲系統和程式的指令、數據、緩存等 關於記憶體的學習,我會儘量以通俗易懂的方式且分成多篇文章去講解 那麼今天在 pt.1 文章中,我們來學習一下 Linux 中 ...
  • 本文分享自天翼雲開發者社區《RPM常用命令以及組合使用場景》,作者:鄔祥釗 當涉及到管理基於 Red Hat 系的 Linux 系統時,RPM (Red Hat Package Manager) 是一個常用的軟體包管理器。以下是一些常用的 RPM 命令以及它們的組合使用場景: 常用命令: 1. rp ...
  • 本人習慣了Linux環境的du命令,在HP-UX下,發現du命令真的非常難用,有種讓人很難受的感覺。主要是因為HP-UX下的du命令參數比Linux平臺du命令參數要少很多,尤其是沒有-h這個參數,它只能以kb形式顯示文件/文件夾的大小,對於我來說,看起來非常不直觀。下麵是工作中,HP-UX平臺使用 ...
  • 環境: 工具:Firefox 84版本 或者 360游覽器-某特殊版本 系統版本:Windows 10 問題描述: 描述:進入某需要Flash插件的管理網站,使用edge等最新主流游覽器均無法調用Flash,開啟IE模式也沒有做用,網上的其他教程也因為時效性已經無法生效。 問題解釋: 解釋:各大主流 ...
  • 環境: 系統版本:Windows 10 家庭中文版 問題描述: 描述:按下Win+G後彈出提示框,需要使用新應用以打開此 ms-gamingoverlay 鏈接 問題解釋: 誤將Xbox game bar應用程式刪除了,無法找到啟動的程式。 這個程式我當時以為就是個打游戲的,我就刪除了,沒想到錄屏會 ...
  • 功能03-優惠券秒殺03 4.功能03-優惠券秒殺 4.6Redisson的分散式鎖 Redis分散式鎖—Redisson+RLock可重入鎖實現篇 4.6.1基於setnx實現的分散式鎖問題 我們在4.5自己實現的分散式鎖,主要使用的是redis的setnx命令,它仍存在如下問題: 4.6.2Re ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...