0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

火山引擎:ClickHouse增強(qiáng)計(jì)劃之“Upsert”

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

相信大家都對大名鼎鼎的ClickHouse有一定的了解了,它強(qiáng)大的數(shù)據(jù)分析性能讓人印象深刻。但在字節(jié)大量生產(chǎn)使用中,發(fā)現(xiàn)了ClickHouse依然存在了一定的局限。例如:

? 缺少完整的upsert和delete操作

? 多表關(guān)聯(lián)查詢能力弱

? 集群規(guī)模較大時(shí)可用性下降(對字節(jié)尤其如此)

? 沒有資源隔離能力

因此,我們決定將ClickHouse能力進(jìn)行全方位加強(qiáng),打造一款更強(qiáng)大的數(shù)據(jù)分析平臺。后面我們將從五個(gè)方面來和大家分享,本篇將詳細(xì)介紹我們是如何為ClickHouse補(bǔ)全更新刪除能力的。

實(shí)時(shí)人群圈選場景遇到的難題

在電商業(yè)務(wù)中,人群圈選是非常常見的一個(gè)場景。字節(jié)原有的離線圈選的方案是以T+1的方式更新數(shù)據(jù),而不是實(shí)時(shí)更新,這很影響業(yè)務(wù)側(cè)的體驗(yàn)。現(xiàn)在希望能夠基于實(shí)時(shí)標(biāo)簽,在數(shù)據(jù)管理平臺中構(gòu)建實(shí)時(shí)人群圈選的能力。整體數(shù)據(jù)鏈路如下:

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

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

? 性能下降嚴(yán)重,ReplacingMergeTree采用的是寫優(yōu)先的設(shè)計(jì)邏輯,這導(dǎo)致讀性能損失嚴(yán)重。表現(xiàn)是在進(jìn)行查詢時(shí)性能較ClickHouse其他引擎的性能下降嚴(yán)重,涉及ReplacingMergeTree的查詢響應(yīng)時(shí)間過慢。

? ReplacingMergeTree引擎只支持?jǐn)?shù)據(jù)的更新,并不支持?jǐn)?shù)據(jù)的刪除。只能通過CollaspingMergeTree來實(shí)現(xiàn)數(shù)據(jù)清除,通過不同的表引擎分別提供更新刪除能力會讓系統(tǒng)復(fù)雜度進(jìn)一步提升。

? ReplacingMergeTree中的去重是 Merge 觸發(fā)的,在剛導(dǎo)入的數(shù)據(jù)時(shí)是不去重的,過一段時(shí)間后才會在分區(qū)內(nèi)去重。

ByteHouse的解決方案:UniqueMergeTree

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

原生ClickHouse選擇的技術(shù)方案

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

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

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

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

面向讀優(yōu)化的新方案

UniqueMergeTree使用的技術(shù)方案Mark-Delete + Insert方案剛好反過來,是一個(gè)讀優(yōu)化方案。在這個(gè)方案中,更新是通過先刪除再插入的方式實(shí)現(xiàn)的。

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

Ref “Enhancements to SQLServer Column Stores”

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

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

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

Upsert和Delete使用示例

首先我們建了一張UniqueMergeTree的表,表引擎的參數(shù)和ReplacingMergeTree是一樣的,不同點(diǎn)是可以通過UNIQUE KEY關(guān)鍵詞來指定這張表的唯一鍵,它可以是多個(gè)字段,可以包含表達(dá)式等等。

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

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

UniqueMergeTree表引擎的亮點(diǎn)

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

? UniqueMergeTree表引擎既支持行更新的模式,也支持部分列更新的模式,用戶可以根據(jù)業(yè)務(wù)要求開啟或關(guān)閉。

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

? 最后ByteHouse也支持?jǐn)?shù)據(jù)在多副本的同步,避免整體系統(tǒng)存在單點(diǎn)故障。

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

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

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

增強(qiáng)后的實(shí)施人群圈選

經(jīng)過UniqueMergeTree的加持,在原有架構(gòu)不變的情況下,完美的滿足了實(shí)時(shí)人群圈選場景的要求。

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

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

3、支持根據(jù)Unique Key實(shí)時(shí)刪除數(shù)據(jù)

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

1、唯一鍵支持多字段和表達(dá)式

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

3、支持自定義版本字段,寫入低版本數(shù)據(jù)時(shí)自動忽略

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

不僅在實(shí)時(shí)人群圈選場景,ByteHouse提供的upsert能力已經(jīng)服務(wù)于字節(jié)內(nèi)部眾多應(yīng)用,線上應(yīng)用的表數(shù)量有數(shù)千張,受到實(shí)時(shí)類應(yīng)用的廣泛歡迎。

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

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 引擎
    +關(guān)注

    關(guān)注

    1

    文章

    358

    瀏覽量

    22513
  • 數(shù)據(jù)分析
    +關(guān)注

    關(guān)注

    2

    文章

    1410

    瀏覽量

    33987
  • key
    key
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    12807

原文標(biāo)題:火山引擎:ClickHouse增強(qiáng)計(jì)劃之“Upsert”

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

收藏 人收藏

    評論

    相關(guān)推薦

    中科創(chuàng)達(dá)與火山引擎達(dá)成深度合作

    近日,中科創(chuàng)達(dá)與火山引擎在成都盛美利亞酒店隆重舉行深度合作簽署儀式。火山引擎汽車行業(yè)總經(jīng)理?xiàng)盍?、中科?chuàng)達(dá)執(zhí)行總裁常衡生見證簽約,火山
    的頭像 發(fā)表于 11-04 14:34 ?165次閱讀

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

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

    字節(jié)跳動豆包大模型已支持實(shí)時(shí)語音通話

    字節(jié)跳動火山引擎今日隆重推出創(chuàng)新對話式AI實(shí)時(shí)交互解決方案,該方案以火山方舟大模型服務(wù)平臺為核心,全面升級語音交互體驗(yàn)。該方案深度融合火山引擎
    的頭像 發(fā)表于 08-12 16:13 ?677次閱讀

    微軟計(jì)劃在搜索引擎Bing中引入AI摘要功能

    近期,科技界傳來新動向,微軟緊隨百度與谷歌的步伐,宣布計(jì)劃在其搜索引擎Bing中引入先進(jìn)的AI摘要功能,旨在為用戶帶來更加智能、豐富的搜索體驗(yàn)。
    的頭像 發(fā)表于 07-26 14:23 ?422次閱讀

    供應(yīng)鏈場景使用ClickHouse最佳實(shí)踐

    關(guān)于ClickHouse的基礎(chǔ)概念這里就不做太多的贅述了,ClickHouse官網(wǎng)都有很詳細(xì)說明。結(jié)合供應(yīng)鏈數(shù)字化團(tuán)隊(duì)在使用ClickHouse時(shí)總結(jié)出的一些注意事項(xiàng),尤其在命名方面要求研發(fā)嚴(yán)格遵守
    的頭像 發(fā)表于 07-18 15:05 ?241次閱讀
    供應(yīng)鏈場景使用<b class='flag-5'>ClickHouse</b>最佳實(shí)踐

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

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

    ClickHouse內(nèi)幕(3)基于索引的查詢優(yōu)化

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

    火山引擎攜手東軟睿馳等成立汽車大模型生態(tài)聯(lián)盟

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

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

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

    OPPO、vivo、小米、三星、字節(jié)跳動成立智能終端大模型聯(lián)盟

    在字節(jié)跳動 2024 春季火山引擎 Force 原動力大會上,火山引擎與 OPPO、vivo、榮耀、小米、三星、華碩宣布成立智能終端大模型聯(lián)盟。
    的頭像 發(fā)表于 05-20 10:48 ?767次閱讀

    東軟睿馳成為“火山引擎汽車大模型生態(tài)聯(lián)盟”首批會員

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

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

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

    火山引擎聯(lián)手多手機(jī)廠商啟動智能終端大模型聯(lián)盟,對外開放

    此外,OPPO的小布助手、榮耀的智慧辦公智能助手、小米的“小愛同學(xué)”及華碩的筆記本電腦豆叮AI助手中,都已經(jīng)采用了火山引擎的大模型服務(wù)。
    的頭像 發(fā)表于 05-15 15:02 ?603次閱讀

    第五代英特爾至強(qiáng)可擴(kuò)展處理器助力火山引擎應(yīng)用性能提升

    近日,火山引擎在成都成功舉辦了西南地區(qū)首場公共云·城市分享會活動。此次活動以“乘云·向未來”為主題,匯聚了眾多技術(shù)領(lǐng)域的專家,共同探討企業(yè)規(guī)?;迷茖?shí)踐及AI創(chuàng)新實(shí)踐,致力于探索“云+AI”的發(fā)展新趨勢,為西南地區(qū)企業(yè)的數(shù)字化、智能化升級提供全面的產(chǎn)品技術(shù)服務(wù)。
    的頭像 發(fā)表于 03-16 09:34 ?920次閱讀

    ClickHouse 聯(lián)合創(chuàng)始人、前 Google 副總裁 Yury 到訪杭州玖章算術(shù)公司,雙方建立生態(tài)合作

    10 月 31 日,ClickHouse 聯(lián)合創(chuàng)始人 Yury 到訪未來科技城,與玖章算術(shù)創(chuàng)始人葉正盛和國際總經(jīng)理 Ni Demai 展開溝通與推進(jìn)合作。ClickHouse 是深受開發(fā)者青睞的實(shí)時(shí)
    的頭像 發(fā)表于 11-17 11:23 ?872次閱讀
    <b class='flag-5'>ClickHouse</b> 聯(lián)合創(chuàng)始人、前 Google 副總裁 Yury 到訪杭州玖章算術(shù)公司,雙方建立生態(tài)合作