從使用的角度看 ByConity 和 ClickHouse 的差異
(原標題:從使用的角度看 ByConity 和 ClickHouse 的差異)
自 ClickHouse Inc 宣佈其重要新功能僅在 ClickHouse Cloud 上開放以來,一些關注 ByConity 開源的社區小夥伴也來詢問 ByConity 後續開源規劃。爲回答社區疑問,我們將之前分享的關於 ByConity 與 ClickHouse 相關功能對比的 webinar 整理爲文章,並更新 ByConity 0.2.0所發佈最新功能與 ClickHouse 對比內容,幫助社區小夥伴瞭解 ByConity 開源社區規劃與進展。
ByConity & ClickHouse 使用視角對比
我們整理了一些從實用角度看 ClickHouse & ByConity 的異同點,與大家分享:
架構和組件
山西消防开展超高层综合体建筑灭火救援综合实战演练
ClickHouse 的架構及組件
糗了!奧客把顧客誤當員工開罵 氣到客訴喊:叫你們主管出來
ClickHouse 是典型的 MPP 架構,節點對等,所有的功能都被放在 ClickHouse server 組件中。當部署 ClickHouse 集羣時,主要是把 ClickHouse server 部署在一組物理機上。
分佈式表 & 本地表
Garmin MARQ 秋冬时尚新亮点
ClickHouse 提出了分佈式表的概念,當 Client 做查詢時,首先連接節點找到分佈式表,通過 sharding key 的定義以及集羣的配置知道分佈式表對應的本地表及分佈節點。再通過兩階段的執行,先到節點上做本地表的查詢,再把查詢結果匯聚到分佈式表,然後再返回給客戶端。
一口气看完《好事成双》后,留给张小斐的机会不多了
Replicas
严重违法,立案调查!
ClickHouse 提供數據複製的能力,通過對每一個本地表配置 Replica 進行數據複製。不管是分佈式的執行,還是數據的複製,都需要 Coordinator 進行節點之間的通信,包括任務的分發等。
Zookeeper & ClickHouse Keeper
ClickHouse 之前通過 Zookeeper 提供 Coordinator 能力,部署一個 ClickHouse 集羣需要同時部署一個 Zookeeper 集羣來承擔對應的工作。後來發現 Zookeeper 集羣存在很多侷限性,在大規模分析型數據查詢中會碰到很多性能瓶頸和使用問題,因此進行了一定改進,用 C++ 和 raft 協議實現了 ClickHouse Keeper 組件。ClickHouse Keeper 提供兩種部署方式,既可以像 Zookeeper 一樣作爲單獨的集羣去部署,也可以放在 ClickHouse server 裡跟 ClickHouse server 一同部署。
台股挟五利多 轧空手上膛
ByConity 的架構及組件
ByConity 是存算分離的架構,整體架構主要分爲三層:服務接入層、計算層和雲存儲層。

服務接入層
由一組 server 和共享的服務組件組成,包括 TSO、Daemon Manager、Resource Manager。
國民旅遊卡新制懶人包!除了用餐券、訂飯店,你還可以這樣玩
計算層
公司资金贷予他人 应算利息收入
雲存儲層
ByConity 的部署要求
(体育)40岁老将创高尔夫球女子中巡赛最年长冠军纪录
在部署 ByConity 時,不同的組件有不同的硬件要求。對一些共享服務,如 TSO、Daemon Manager 和 Resource Manager,其資源需求相對較低且比較固定;server 和 worker 所需資源相對較多,尤其是 worker,需要根據不同的查詢場景部署到不同的硬件規格上。
ByConity 社區推薦使用 Kubernetes 來部署,可通過官方提供的工具和腳本來實現自動化操作,集羣后期的運維管理也更方便。
由於部署 ByConity 也包括元數據以及遠端的存儲,即使部署測試環境也有前置要求,即 HDFS 和 Foundation DB。如本身已有環境,可直接進行配置使用。如果沒有,可參考對應的部署文檔進行設置。

ByConity 的架構特性
“双11”来临,山东发布致全省网络交易经营者的提示与指引
ByConity 的架構演進源於字節在使用 ClickHouse 過程中所遇到的痛點。ByConity 的組件雖然比較複雜,但設計這些組件有其對應的優勢。
資源隔離
資源隔離是一個業務高速發展中集羣環境變複雜的過程中不可避免的問題。資源隔離有多個層面。
ClickHouse 的資源隔離
ClickHouse 沒有在架構層面對資源隔離做專門的設計,因此 ClickHouse 在做上述這些資源隔離時需要單獨的方案。
新智家周刊(10.30-11.3)
讀寫分離可以通過精準配置 replica(部分專門負責讀,部分專門負責寫),結合 load balance 策略以及集羣的部署方式做一定的區分。但此方案有一定侷限性,一是運維成本較高,需要手動精準控制。二是讀寫分離的資源不方便重用,專門用來負責寫的 replica,在讀請求高峰時無法 serve 讀請求。
冷熱分離可以通過 TTL,TO DISK,TO VOLUME 的功能,把冷數據和熱數據分別指定不同的存儲介質去存儲。存儲方面能夠帶來成本節約的好處,但是在計算層面依然使用同樣的資源,無法做到分離。
微软真急了 Windows 10商店挂横幅督促用户升级
ByConity 的資源隔離
ByConity 可以通過 Virtial Warehouse 部署和使用實現多級資源隔離。由於 Virtial Warehouse 是無狀態的,可以針對不同業務、不同場景按需創建。Virtial Warehouse 的創建操作是無感的,所包含的 worker 的創建也比較靈活。不同的 Virtial Warehouse 之間資源獨佔,可以比較輕鬆地實現上述隔離。
集羣擴縮容
畢業優惠開搶! 台灣虎航「台北、台中、高雄」飛澳門899元、飛東京甜甜價1799元
擴縮容是在業務不斷增長的場景中必須要考慮的話題。業務在爆發式增長的過程中,可能每兩週就需要對集羣進行一次擴容,每次擴容都需要伴隨很多操作,帶來很多的成本。因此擴縮容不得不考慮。
ClickHouse 的擴縮容
ClickHouse 架構層面未專門考慮擴縮容。ClickHouse 的擴縮容需要通過一定手段來實現:
AKIRA首海外专场福利大放送 私下一举动超暖心
ByConity 的擴縮容
ByConity 是基於存算分離的無感彈性擴縮容,通過 Virtial Warehouse 和 worker 來實現。
庫表創建
《人民的名义》高育良的最大错误,为了私利,和赵瑞龙做交易
ClickHouse
ByConity
【微特稿·时事与军事】联合国寻求12亿美元援助加沙地带和约旦河西岸居民
數據導入
ClickHouse
如何照料抑郁症患者?让遗憾少一点,再少一点!
ClickHouse 的數據導入包括基礎的 insert 操作,外部文件的導入 insert into … infile… 。 另外 ClickHouse 提供了很多的外表引擎,可以利用這些外表引擎創建外表,通過 insert select 從外表把數據導入 ClickHouse。ClickHouse 多用在實時數倉場景,在 ClickHouse 的數據導入中,實時數據導入是一個比較重要的話題。ClickHouse 專門的表引擎—— ClickHouse Kafka 在 ClickHouse 中用得非常多。
ByConity
ByConity 對於基礎 insert、外部文件導入以及外表數據導入與 ClickHouse 相同,語法上也一樣。此外,ByConity 提供了更多的數據導入方式,包括一個數據導入工具,PartWriter。
新型卖淫方式曝光,性感“厨媛”上门服务,毁了多少家庭
PartWriter
可以集成在 Spark 的流程處理中,不通過 ByConity 的表引擎,直接將數據文件轉換爲 ByConity 能夠識別的的 parts 文件。
後臺任務
在數據導入時有很多後臺任務需要管理,如數據導入之後的 merge 和 mutate 任務,Kafka 表引擎實時消費任務等。通過操作語句跟後臺任務進行交互,監控後臺任務的執行情況及系統表的性能指標,能夠實現對後臺任務的精準控制。
實時數據消費
ClickHouse 的 Kafka 表引擎
国六丰田酷路泽LC300现车GR运动降价
ClickHouse 做 Kafka 的數據導入會創建以下幾個部分:
Kafka 的數據導入在創建以上三個部分之後會在後臺運行,之後不停地把數據從 Kafka 消費出來寫入到目標表。
ByConity 的 Kafka 表引擎
ByConity 從基本用法跟 ClickHouse 一致,從 Kafka 消費數據也是創建外表、CNCH MergeTree,並創建一個 Materialized View 把兩部分連接起來。但是 ByConity 在具體操作中跟 ClickHouse 存在差異。
对话朱江明:零跑的赛跑、长跑和领跑
Kafka 消費模式方面的差異:
如何保證 Exactly Once
戴琳发视频自证未被带走:最近的新闻需要时间消化,感谢大家
ByConity 採用 Low Level 的消費模式:Kafka 消費當中的 assign 靜態地分配 Partition 到具體的 consumer instance,這也是 ByConity 多層架構的便利性,可以由 server 控制 Partition 的分發,由worker 執行真正的 consumer instance 的消費操作。
本身具有調度能力的產品更傾向於用 Low Level 的消費方式,如 Flink 和 Spark streaming。此方式的一個最大的好處是不會造成數據重複,儘量保證 Exactly Once,精準控制哪個 Partition 由哪個 consumer 消費。同時在提交 offset 時,也會讓數據寫入和 offset 的提交有事務保證。在線上運維排查及數據審計時也更加方便,Partition 不會亂飄,如發現 Partition 有比較大的 LAG 也有跡可循,直接從 server 上找到具體的 worker,進而找到具體失敗的原因。
數據查詢
ClickHouse
ClickHouse 對複雜查詢的支持並不完整,它採用兩階段聚合的方式,即分佈式表和本地表。在分佈式表把查詢分發到本地表,在本地表做第一個階段的聚合之後再聚合到分佈式表做第二階段的聚合,也稱爲scatter/gather 的模式。
ClickHouse 提供了 GLOBAL JOIN 和 GLOBAL IN,類似於 Broadcast Join 的方式。在一個大表去 join 小表的時候,可以讓小表的數據先一步被計算出來,然後分發到大表去做 local 的 join。ClickHouse 對複雜查詢支持有限,多表 join 一直是 ClickHouse 的痛點。使用 ClickHouse 需要在前期儘量把數據打平成大寬表。
“孝亲敬老”志愿服务活动走进新泰市西张庄镇敬老院
ByConity
ByConity 的複雜查詢通過優化器來實現,優化器對複雜查詢有非常大的性能提升,推薦默認打開。ByConity 引入了多階段的查詢,首先由優化器生成執行計劃並分派到各個 worker,進而支持比較複雜的查詢,如節點之間有數據的消費能力的查詢。
Apple Watch Ultra「掉湖底3個月」尋回還能用!模樣曝光驚呼:蘋果技術太強
優化器的工作需要統計信息支撐,因爲它裡面有 CBO,需要去手動地維護統計信息。ByConity 提供了對統計信息操作的手段,包括 create Stats,drop stats,以及去查看統計信息的手段。具體內容可以參考優化器的分享:ByConity Monthly Webinar-20230321-優化器原理解析與性能差異_嗶哩嗶哩_bilibili
分佈式事務
爲什麼要支持事務
苏州七次供地:苏州恒泰4.97亿元底价竞得工业园区租赁住房地块
在分佈式系統中,不同的系統對事務支持程度不同,一般考慮 ACID 四個特性。OLTP 數據庫對事務的要求較高,一般支持多種事務的隔離級別,且會支持比較高的級別,如 Serializable。但是一些 NO SQL 的數據庫,爲了達到極致性能,會把 ACID 的部分特性做得相對較弱。
OLAP 的環境中很多時候並不特別強調事務的重要性。但在真正的業務中,即使對 OLAP 系統,事務也是非常重要的。其中一個關鍵是保證數據的準確性,有些系統雖然能夠保證最終的一致性,但在過程中會出現數據不準確的情況。對實時性要求比較高的系統,數據不準確會帶來不好的用戶體驗。
2天升2角!新台币周线翻红
此外在使用 OLAP 系統時,因爲數據不都是一次性導入的,經常會有數據的增量更新,在這種需求裡面也需要事務操作。
跑步新手掌握四个技巧 同时提升速度和耐力
ClickHouse
ClickHouse 雖然有分佈式的查詢,但是並不支持分佈式事務,本地事務支持目前僅針對單次寫入在 max_insert_block_size 以內的數據有事務保證。
此種事務保證對於大部分在 ClickHouse 裡面真正跑的查詢是不夠的,ClickHouse 社區目前正在實現事務增強,如提供 MVCC 和 RC 的隔離級別,支持多 insert 和多 select 組成的交互性事務。此功能還目前還在 experimental 階段,需要特殊配製才能使用。即使最終完全實現也還是一個 local 的事務,只針對本地表有事務保證,無分佈式事務的規劃。
ByConity
前10月A股IPO募资3320亿元,56家券商分196亿承销保荐费;私募基金业严监管态势持续,年内注销机构数量已超去年全年
ByConity 進行了比較完整的分佈式事務實現,其 ACID 的特性保證如下:
另外,ByConity 通過兩個比較重要的組件來進行事務保證。
在事務的具體實現中,這是一個典型的兩階段提交的實現。第一個階段寫入事務記錄,包括寫 undo buffer,遠端存儲,提交元信息等。第二個階段真正提交事務,並更新事務記錄的提交時間。在事務成功和失敗的時候,用 undo buffer 去做一些清理。

歐盟主席首訪菲 批陸在台海作為
特殊的表引擎
Unique 表引擎
很多分析型數據庫有 Upsert 的需求,如果表中存在已有數據,希望覆蓋掉前面的重複數據,因此需要唯一鍵的保證來進行判讀。ClickHouse 很難保證數據插入的唯一性。ClickHouse 提供的 replacing MergeTree 可以在一定程度上達到此效果,但 replace MergeTree 不保證鍵一定是唯一的,因爲它是異步,要在 merge 時才能做數據的覆蓋。如果 merge 一直不做或者做得比較晚則會出現重複數據的狀態,而這種狀態在很多場景下不允許出現。因此需要一個能夠保證鍵的唯一性的場景來做 Upsert 的支持。
ByConity 的實現方式
扎克伯格:马斯克对待笼斗并不认真,不想炒作不会发生的事
ByConity 對 Upsert 支持中,行級的 update 操作被轉換成 delete + insert。行級 delete 通過 DeleteBitmap 實現,DeleteBitmap 存放了該 part 中所有被刪除的行的行號。具體的增刪改查都會圍繞 DeleteBitmap 操作,比如 insert 時修改 Bitmap 對比版本信息;在 select 之後,根據 DeleteBitmap 當中的標識去 filter 數據。

爲了加速執行,ByConity 對 Unique Key 創建了 index。因爲在 Bitmap 中放的是行號,從 key 到行號需要索引,通過 Unique Key Index 可以實現 Key 到行號的快速定位。
科沃斯:控股股东拟不低于1亿元增持公司股份
唯一性的保證也需要控制寫衝突的發生。在併發的情況下,如果有不同的寫請求過來,需要加鎖去保證寫衝突不會發生。從上可知,Unique 表引擎需要一定代價,是在真正需要此場景的表裡纔會需要用到的表引擎。
Bucket 表
Snowflake 提出了 cluster table 的概念,即當一個表的數據量比較大時能夠對錶的數據進行再分片。即使是同一個 Partition 中的數據,也希望能夠再分片,增加整個系統的並行度,並利用分片的 key 做性能優化。
Bucket 表在 ByConity 中需要以下語句來實現:
趁着春节,《守望先锋》推出了新皮肤和新模式
CREATE TABLE t(…)
CLUSTER BY (column, expression, …) INTO 32 BucketS
ALTER TABLE t CLUSTER BY (column, expression, …) INTO 64 BucketS
ALTER TABLE t DROP CLUSTER
需要使用 Bucket 表的場景
首先表的數據要足夠大,一個 Partition 的數據要產生足夠多且比較大的 Parts,⾄少需要顯著多於 worker 的數量,不至於產生很多的小文件。另外要有一些性能優化的場景,有助於查詢中性能的提升。
使用 Bucket 表的收益
Cluster key 的選擇
用 Bucket 表的時候,需要注意 cluster key 的選擇,選擇的時候要儘量去選在查詢條件中經常會用到的組合的 column、經常需要聚合的 column,以及 join 時的一些 join key。
分桶數量的選擇
女友突袭俏丽短发 他气炸崩溃… 网暴动:你只爱她的长发
分桶數量可以參考 worker 的數量。做 Bucket 表一定程度上的目的是能夠儘量發揮多個 worker 的計算能力去進行並行計算。所以在分桶數量選擇上可以儘量地去選 worker 的倍數,比如1倍或者2倍。
Recluster
分桶指定好了可以改變,但是改變需要一定的代價,需要數據的重新分配。因此建議儘量在必要的時候才進行 recluster 的操作。
數據湖支持
ClickHouse 支持以外表的形式讀取 Hive 以及 Hudi/Iceberg 等格式。這些外表都是以本地單機表的形式存在,因此性能並不能令人滿意。且實現上較爲割裂,使用起來較爲不便。目前 Hive 僅能支持讀取 HDFS 上數據,Hudi/Iceberg 僅能支持讀取S3上的數據。
大陆国常会 推动稀土产业高端化
ByConity 通過統一的 Multi-catalog 的架構,極大增強了使用外表的便捷性。
巴西蛋誤標效期全下架 游淑慧諷:台灣有一堆「壞蛋」

影视剧取景地,五一也“狂飙”
ByConity Multi-Catalog
Multi-Catalog 的設計允許用戶在同一個 Hive 實例中同時連接多個不同的存儲和元數據服務,而不必爲每個存儲創建單獨的 Hive 實例。這簡化了數據管理和查詢的複雜性,使組織能夠更好地管理和利用其多樣化的數據資源。目前已經支持的外部 Catalog 有:Hive,Apache Hudi,AWS Glue。
用戶可以使用創建一個基於 Hive 和 S3存儲的 Catalog
create external catalog hive_s3properties type=’hive’, hive.metastore.uri = ‘thrift://localhost:9083’;
然後使用三段式的命名來直接訪問 Hive 外表
必學直筒、A字、窄裙的裙款挑選祕訣!瞬間穿搭出 -5KG 展現令人稱羨纖細比例
select * from hive_s3.tpcds.call_center;
也可以使用 query 來查看 external catalog 相關的信息
— display information releated to hive_s3show create external catalog hive_s3;– show databases in hive_s3show databases from hive_s3;– show tables in tpcds database in hive.show tables from hive_s3.tpcds;
ByConity Hive 外表
三国志11:华为大战苹果,这情况像极了委身荆州的刘备
ByConity CnchHive 可以充分使用 Virtual Warehouse 的計算資源執行查詢。支持 HDFS 和 S3文件系統。爲了優化性能,ByConity Hive 外表支持統計信息集成優化器,它可以根據數據的統計信息自動選擇最佳的執行計劃。統計信息集成優化器可以在 benchmark 中顯著提高查詢性能。目前ByConity Hive 外表不僅能完整跑通 TPC-DS 基準測試,同時在性能方面表現出色。
CREATE TABLE tpcds_100g_parquet_s3.call_centerENGINE = CnchHive(‘thrift://localhost:9083’, ‘tpcds’, ‘call_center’)SETTINGS vw_default = ‘vw_default’;
ByConity Hudi 外表
王爷,你尾巴掉了
日月光:半导体业决战矽光子
ByConity 實現了對 Apache Hudi Copy-On-Write 表的進行快照查詢。在開啓 JNI Reader 後可以支持 Merge-On-Read 表的讀取。Hudi 支持同步 HiveMetastore,因此 ByConity 可以通過 HiveMetastore 感知 Hudi 表。
CREATE TABLE hudi_tableENGINE = CnchHudi(‘thrift://localhost:9083’, ‘hudi’, ‘trips_cow’)SETTINGS vw_default = ‘vw_default’;
總結
国六丰田酷路泽LC300现车GR运动降价
下表總結了 ClickHouse 和 ByConity 之間的一些不同點,幫助大家有一個比較清晰的瞭解。除此之外,ByConity 還有很多特性。歡迎關注更多相關的內容分享。
花東單車New玩法! 深度徐行縱谷最佳載具 超省力電輔車X在地體驗

分享視頻:從使用的角度看 ByConity 和 ClickHouse 的差異_嗶哩嗶哩_bilibili
加入社區
對於一個開源項目,引入更多參與者、讓社區往多元化方向發展往往是重要目標之一,ByConity 也不例外。我們積極與社區成員共同探討和解決大家在試用過程中遇到的問題,團隊有耐心、也有信心,更是非常期待未來能夠與更多開發者和合作夥伴一起共建共享,激發更多創造力。歡迎加入 ByConity 社區,與我們共建~