吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

火山引擎:ClickHouse增強計劃之“Upsert”

倩倩 ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-09-22 14:26 ? 次閱讀

相信大家都對大名鼎鼎的ClickHouse有一定的了解了,它強大的數據分析性能讓人印象深刻。但在字節大量生產使用中,發現了ClickHouse依然存在了一定的局限。例如:

? 缺少完整的upsert和delete操作

? 多表關聯查詢能力弱

? 集群規模較大時可用性下降(對字節尤其如此)

? 沒有資源隔離能力

因此,我們決定將ClickHouse能力進行全方位加強,打造一款更強大的數據分析平臺。后面我們將從五個方面來和大家分享,本篇將詳細介紹我們是如何為ClickHouse補全更新刪除能力的。

實時人群圈選場景遇到的難題

在電商業務中,人群圈選是非常常見的一個場景。字節原有的離線圈選的方案是以T+1的方式更新數據,而不是實時更新,這很影響業務側的體驗。現在希望能夠基于實時標簽,在數據管理平臺中構建實時人群圈選的能力。整體數據鏈路如下:

3b2cc968-3a3d-11ed-9e49-dac502259ad0.png

為了保證實時數據和離線數據同時提供服務,在標簽接入完畢后,在ClickHouse中完成寬表加工任務。但是原生ClickHouse只支持追加寫的能力,只有ReplacingMergeTree這種方案。但是選用ReplacingMergeTree引擎的限制比較多,不能滿足業務的需求,主要體現在:

? 性能下降嚴重,ReplacingMergeTree采用的是寫優先的設計邏輯,這導致讀性能損失嚴重。表現是在進行查詢時性能較ClickHouse其他引擎的性能下降嚴重,涉及ReplacingMergeTree的查詢響應時間過慢。

? ReplacingMergeTree引擎只支持數據的更新,并不支持數據的刪除。只能通過CollaspingMergeTree來實現數據清除,通過不同的表引擎分別提供更新刪除能力會讓系統復雜度進一步提升。

? ReplacingMergeTree中的去重是 Merge 觸發的,在剛導入的數據時是不去重的,過一段時間后才會在分區內去重。

ByteHouse的解決方案:UniqueMergeTree

在這種情況下,字節在ByteHouse(火山引擎上基于ClickHouse能力增強的版本)中開發了一種支持實時更新刪除的表引擎:UniqueMergeTree。UniqueMergeTree與以往的表引擎有什么差別呢?下面介紹兩種支持實時更新的常見技術方案:

原生ClickHouse選擇的技術方案

原生ClickHouse的更新表引擎ReplacingMergeTree使用Merge on Read的實現邏輯,整個思想比較類似LSMTree。對于寫入,數據先根據key排序,然后生成對應的列存文件。每個Batch寫入的文件對應一個版本號,版本號能用來表示數據的寫入順序。

同一批次的數據不包含重復key,但不同批次的數據包含重復key,這就需要在讀的時候去做合并,對key相同的數據返回去最新版本的值,所以叫merge on read方案。原生ClickHouse ReplacingMergeTree用的就是這種方案。

大家可以看到,它的寫路徑是非常簡單的,是一個很典型的寫優化方案。它的問題是讀性能比較差,有幾方面的原因。首先,key-based merge通常是單線程的,比較難并行。其次merge過程需要非常多的內存比較和內存拷貝。最后這種方案對謂詞下推也會有一些限制。大家用過ReplacingMergeTree的話,應該對讀性能問題深有體會。

這個方案也有一些變種,比如說可以維護一些index來加速merge過程,不用每次merge都去做key的比較。

面向讀優化的新方案

UniqueMergeTree使用的技術方案Mark-Delete + Insert方案剛好反過來,是一個讀優化方案。在這個方案中,更新是通過先刪除再插入的方式實現的。

3b620326-3a3d-11ed-9e49-dac502259ad0.png

Ref “Enhancements to SQLServer Column Stores”

下面以SQLServer的Column Stores為例介紹下這個方案。圖中,每個RowGroup對應一個不可變的列存文件,并用Bitmap來記錄每個RowGroup中被標記刪除的行號,即DeleteBitmap。處理更新的時候,先查找key所屬的RowGroup以及它在RowGroup中行號,更新RowGroup的DeleteBitmap,最后將更新后的數據寫入Delta Store。查詢的時候,不同RowGroup的掃描可以完全并行,只需要基于行號過濾掉屬于DeleteBitmap的數據即可。

這個方案平衡了寫和讀的性能。一方面寫入時需要去定位key的具體位置,另一方面需要處理write-write沖突問題。

這個方案也有一些變種。比如說寫入時先不去查找更新key的位置,而是先將這些key記錄到一個buffer中,使用后臺任務將這些key轉成DeleteBitmap。然后在查詢的時候通過merge on read的方式處理buffer中的增量key。

Upsert和Delete使用示例

首先我們建了一張UniqueMergeTree的表,表引擎的參數和ReplacingMergeTree是一樣的,不同點是可以通過UNIQUE KEY關鍵詞來指定這張表的唯一鍵,它可以是多個字段,可以包含表達式等等。

3b8a6fd2-3a3d-11ed-9e49-dac502259ad0.png

下面對這張表做寫入操作就會用到upsert的語義,比如說第6行寫了四條數據,但只包含1和2兩個key,所以對于第7行的select,每個key只會返回最高版本的數據。對于第11行的寫入,key 2是一個已經存在的key,所以會把key 2對應的name更新成B3; key 3是新key,所以直接插入。最后對于行刪除操作,我們增加了一個delete flag的虛擬列,用戶可以通過這個虛擬列標記Batch中哪些是要刪除,哪些是要upsert。

UniqueMergeTree表引擎的亮點

? 對于Unique表的寫入,我們會采用upsert的語義,即如果寫入的是新key,那就直接插入數據;如果寫入的key已經存在,那就更新對應的數據。

? UniqueMergeTree表引擎既支持行更新的模式,也支持部分列更新的模式,用戶可以根據業務要求開啟或關閉。

? ByteHouse也支持指定Unique Key的value來刪除數據,滿足實時行刪除的需求。支持指定一個版本字段來解決回溯場景可能出現的低版本數據覆蓋高版本數據的問題。

? 最后ByteHouse也支持數據在多副本的同步,避免整體系統存在單點故障。

在性能方面,我們對UniqueMergeTree的寫入和查詢性能做了性能測試,結果如下圖(箭頭前是ReplacingMergeTree的消耗時間,箭頭后是UniqueMergeTree的消耗時間)。

3ba2f660-3a3d-11ed-9e49-dac502259ad0.png

可以看到,與ReplacingMergeTree相比,UniqueMergeTree的寫入性能雖然略有下降,但在查詢性能上取得了數量級的提升。我們進一步對比了UniqueMergeTree和普通MergeTree的查詢性能,發現兩者是非常接近的。

增強后的實施人群圈選

經過UniqueMergeTree的加持,在原有架構不變的情況下,完美的滿足了實時人群圈選場景的要求。

1、通過Unique Key配置唯一鍵,提供upsert更新寫語義,查詢自動返回每個唯一鍵的最新

2、性能:單shard寫入吞吐可以達到10k+行/s;查詢性能與原生CH表幾乎相同

3、支持根據Unique Key實時刪除數據

此外,ByteHouse還通過UniqueMergeTree支持了一些其他特性:

1、唯一鍵支持多字段和表達式

2、支持分區級別唯一和表級別唯一兩種模式

3、支持自定義版本字段,寫入低版本數據時自動忽略

4、支持多副本部署,通過主備異步復制保障數據可靠性

不僅在實時人群圈選場景,ByteHouse提供的upsert能力已經服務于字節內部眾多應用,線上應用的表數量有數千張,受到實時類應用的廣泛歡迎。

除Upsert能力外,ByteHouse在為原生ClickHouse的企業級能力進行了全方位的增強。下一期,我們將介紹ClickHouse增強計劃之“多表關聯查詢”,大家有興趣一定不要錯過。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 引擎
    +關注

    關注

    1

    文章

    361

    瀏覽量

    22630
  • 數據分析
    +關注

    關注

    2

    文章

    1461

    瀏覽量

    34166
  • key
    key
    +關注

    關注

    0

    文章

    51

    瀏覽量

    12860

原文標題:火山引擎:ClickHouse增強計劃之“Upsert”

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    英特爾與火山引擎等合作,夯實AI應用智能底座

    在近期舉辦的火山引擎2024 FORCE原動力大會上,英特爾攜手火山引擎及扣子Coze等生態伙伴,共同展示了在智能計算領域的最新合作成果。 會上,英特爾與
    的頭像 發表于 12-25 11:47 ?428次閱讀

    中科創達攜手火山引擎開啟AI智能座艙新體驗

    12月18日至19日,"2024火山引擎FORCE原動力大會·冬"在上海隆重召開。中科創達作為火山引擎的重要生態合作伙伴受邀參與此次盛會,并在會上展示了與
    的頭像 發表于 12-19 15:45 ?299次閱讀

    機智云邀您相約2024冬季火山引擎FORCE原動力大會

    12月18日~19日,2024冬季火山引擎FORCE原動力大會在上海世博中心舉行,將圍繞前沿技術、行業落地、AI 創業機遇等話題,深入產業探討AI轉型機遇。同時會上將發布多款大模型方案,機智云AI大模型模組邀您參會,掃碼報名!
    的頭像 發表于 12-19 09:49 ?343次閱讀

    ClickHouse:強大的數據分析引擎

    作者:京東物流 陳昌浩 最近的工作中接觸到CK,一開始還不知道CK是什么,通過查詢才知道CK是ClickHouseClickHouse 是俄羅斯的Yandex于2016年開源的列式存儲數據庫
    的頭像 發表于 12-10 10:23 ?145次閱讀
    <b class='flag-5'>ClickHouse</b>:強大的數據分析<b class='flag-5'>引擎</b>

    英特爾與火山引擎飛連攜手升級AI時代企業IT管理體驗

    在 AI 技術的推動下,企業 IT 管理正經歷一場革命。日前,火山引擎飛連新品發布會成功舉辦。英特爾受邀參與此次活動,并在會上展示了新一代英特爾凌動 x7000 系列處理器等產品,與火山引擎
    的頭像 發表于 11-14 17:17 ?583次閱讀

    中科創達與火山引擎達成深度合作

    近日,中科創達與火山引擎在成都盛美利亞酒店隆重舉行深度合作簽署儀式。火山引擎汽車行業總經理楊立偉、中科創達執行總裁常衡生見證簽約,火山
    的頭像 發表于 11-04 14:34 ?343次閱讀

    火山引擎推出豆包·視頻生成模型

    在近期舉辦的2024火山引擎AI創新巡展上,火山引擎總裁譚待隆重推出了豆包·視頻生成模型,這一舉措標志著火山
    的頭像 發表于 09-25 14:11 ?369次閱讀

    供應鏈場景使用ClickHouse最佳實踐

    關于ClickHouse的基礎概念這里就不做太多的贅述了,ClickHouse官網都有很詳細說明。結合供應鏈數字化團隊在使用ClickHouse時總結出的一些注意事項,尤其在命名方面要求研發嚴格遵守
    的頭像 發表于 07-18 15:05 ?334次閱讀
    供應鏈場景使用<b class='flag-5'>ClickHouse</b>最佳實踐

    小米小愛同學攜手火山引擎,共啟智能新篇章

    在數字化浪潮洶涌的今日,人工智能技術的發展日新月異,其應用場景也在不斷拓寬。近日,科技界的這一趨勢又迎來了一次重要的里程碑事件——小米旗下備受用戶喜愛的人工智能助手“小愛同學”與字節跳動旗下的火山引擎達成了戰略合作,標志著雙方將共同探索人工智能領域的新可能。
    的頭像 發表于 06-13 15:33 ?880次閱讀

    ClickHouse內幕(3)基于索引的查詢優化

    ClickHouse索引采用唯一聚簇索引的方式,即Part內數據按照order by keys有序,在整個查詢計劃中,如果算子能夠有效利用輸入數據的有序性,對算子的執行性能將有巨大的提升。本文討論
    的頭像 發表于 06-11 10:46 ?1081次閱讀
    <b class='flag-5'>ClickHouse</b>內幕(3)基于索引的查詢優化

    火山引擎攜手東軟睿馳等成立汽車大模型生態聯盟

    近日,備受矚目的2024春季火山引擎FORCE原動力大會在北京盛大舉行。在大會的矚目環節,火山引擎攜手中國電動汽車百人會,以及包括東軟睿馳、吉利汽車、長城汽車、捷途汽車、賽力斯、智己汽
    的頭像 發表于 06-04 11:16 ?1140次閱讀

    火山引擎與南開大學深化合作簽約,攜手共建“AI+教育”新生態

    近日,在2024春季火山引擎FORCE原動力大會實體產業及教科研專場上,南開大學與火山引擎成功舉辦了深度合作簽約儀式。此次合作標志著雙方將攜手共筑“AI+教育”的新篇章,共同推動教育行
    的頭像 發表于 05-20 11:16 ?668次閱讀

    東軟睿馳成為“火山引擎汽車大模型生態聯盟”首批會員

    5月15日,2024春季火山引擎FORCE原動力大會在北京舉辦,會上火山引擎聯合中國電動汽車百人會,與東軟睿馳及吉利汽車、長城汽車、捷途汽車、賽力斯、智己汽車等20余家廠商宣布成立汽車
    的頭像 發表于 05-17 11:54 ?569次閱讀
    東軟睿馳成為“<b class='flag-5'>火山</b><b class='flag-5'>引擎</b>汽車大模型生態聯盟”首批會員

    火山引擎攜手OPPO、vivo等成立智能終端大模型聯盟

    在字節跳動2024年春季火山引擎Force原動力大會上,火山引擎攜手OPPO、vivo、榮耀、小米、三星及華碩等業界翹楚,正式宣布成立智能終端大模型聯盟。這一聯盟的成立,旨在共同推動大
    的頭像 發表于 05-16 10:25 ?590次閱讀

    火山引擎聯手多手機廠商啟動智能終端大模型聯盟,對外開放

    此外,OPPO的小布助手、榮耀的智慧辦公智能助手、小米的“小愛同學”及華碩的筆記本電腦豆叮AI助手中,都已經采用了火山引擎的大模型服務。
    的頭像 發表于 05-15 15:02 ?738次閱讀
    百家乐经验博彩正网| 百家乐概率计算过程| 现金百家乐网上娱乐| 金樽百家乐的玩法技巧和规则 | 德州扑克下载| 百家乐官网在线小游戏| 游戏机百家乐官网的玩法技巧和规则| 百家乐国际娱乐城| 水果机| 达孜县| 大三元百家乐官网的玩法技巧和规则 | 豪门娱乐网| 真人百家乐官网破解软件下载| 乐九百家乐游戏| 狼2老虎机清零密码| 巨鹿县| 真人百家乐口诀| 大发888电话客服| 百家乐官网怎么计算概率| 百家乐投注网中国体育| 百家乐发牌| 葡京百家乐官网技巧| 地理风水24山72局杨公水法| 大发888游戏平台dafa888gw| 百家乐官网代理在线游戏可信吗网上哪家平台信誉好安全 | 大发888 yule| 百家乐官网自动算牌软件| 百家乐澳门路规则算法| 赌场风云主题曲| 反赌百家乐官网的玩法技巧和规则| 死海太阳城酒店| 大世界百家乐官网娱乐城| 易胜博百家乐作弊| 百家乐官网平台开发| 百家乐连开6把小| 六合彩走势图| 金域百家乐官网的玩法技巧和规则 | 百家乐对付抽水| 太和县| 百家乐游戏世界视频| 玉树县|