ALTER TABLE [db.]table DELETE WHERE filter_expr;
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr;
--Doris/DorisDB SQL 1
select i_item_id, avg(cs_quantity) agg1, avg(cs_list_price) agg2, avg(cs_coupon_amt) agg3, avg(cs_sales_price) agg4
from catalog_sales, customer_demographics, date_dim, item, promotion
where cs_sold_date_sk = d_date_sk and
cs_item_sk = i_item_sk and
cs_bill_cdemo_sk = cd_demo_sk and
cs_promo_sk = p_promo_sk and
cd_gender = 'M' and
cd_marital_status = 'D' and
cd_education_status = 'Advanced Degree' and
(p_channel_email = 'N' or p_channel_event = 'N') and d_year = 1998
group by i_item_id order by i_item_id limit 10;
--ClickHouse SQL 1
select i_item_id, avg(cs_quantity) agg1, avg(cs_list_price) agg2, avg(cs_coupon_amt) agg3, avg(cs_sales_price) agg4 from catalog_sales_dist
global inner join (select cd_demo_sk from customer_demographics_dist where cd_gender = 'M' and cd_marital_status = 'D' and cd_education_status = 'Advanced Degree' )
on cs_bill_cdemo_sk = cd_demo_sk
global inner join (select d_date_sk from date_dim_dist where d_year = 1998 ) on cs_sold_date_sk = d_date_sk
global inner join ( select i_item_sk, i_item_id from item_dist ) on cs_item_sk = i_item_sk
global inner join ( select p_promo_sk from promotion_dist where p_channel_email = 'N' or p_channel_event = 'N') on cs_promo_sk = p_promo_sk
group by i_item_id order by i_item_id limit 10;
类别 | Doris | Clickhouse | |
总体架构 | Share-Nothing | 是 | 是 |
列存 | 是 | 是 | |
架构 | 内置分布式协议进行元数据同步 Master/Follower/Observer节点类型 | 依赖ZooKeeper进行DDL和Replica同步 | |
事务性 | 事务保证数据ACID | 100万以内原子性,DDL无事务保证 | |
数据规模 | 单集群 < 10PB | 单集群 < 10PB | |
导入方式 | Kafka导入 | 内置支持 | 内置支持 |
HDFS导入 | 内置支持 | 外部通过HTTP接口导入 | |
Spark/Flink导入 | 内置支持 | 外部通过HTTP接口导入 | |
本地JDBC/HTTP | 支持 | 支持 | |
INSERT INTO ... SELECT ... | 支持 | 支持 | |
数据格式支持 | orc/parquet/json | 支持多种格式 | |
存储架构 | 数据分区 | 一级范围分区,多个分区字段 | 支持多个分区字段 |
数据分桶 | 二级Hash分桶,分桶和节点、磁盘无关 | 支持分片,分片和节点相关 | |
多副本 | 支持多副本 单节点故障不影响使用 | 支持 支持手工指定副本数量 | |
字段类型 | 支持结构化数据,不支持半结构化/嵌套的数据类型 | 结构化 半结构化(Nested、Array、Map) | |
压缩格式 | 压缩格式支持,LZO,LZ4 | LZ4,ZSTD,压缩率高 | |
索引 | 前缀索引,36个字节的前缀索 | 稀疏索引,无限制 | |
物化视图 | 支持,自动选择 | 支持,手工选择物化视图 | |
精确去重 | 支持,支持Bitmap | 支持 | |
近似去重 | 支持,支持HLL | 支持,uniq函数支持多种去重算法 | |
增量数据合并 | 支持,后台合并 | 支持 | |
自动分区 | 支持自动分区(TTL) | 支持,支持表、分区、列级别的TTL | |
数据类型转换 | 支持 | 部分支持 | |
数据更新与删除 | 支持, Unique Key/Aggregate Key/Primary Key | 支持,Replacing/AggregatingMergeTree | |
写入性能 | 24-54M/S/Tablet(可加大并发) | HDD 150M/S, SSD 250M/S | |
计算能力 | SQL兼容性 | 较好 | 差 |
并发能力 | 并发能力 100QPS/节点,通过增加副本增加并发 | 100QPS/节点,通过增加副本增加并发 | |
宽表与Join | 宽表、大小表性能差,大表Join性能好 | 宽表、大小表Join性能优,大表Join性能差 | |
编译执行 | 支持 | 不支持 | |
向量化计算 | 支持 | 支持 | |
谓词下推 | 强 | 稍弱 | |
BroadCast Join | 支持 | 支持 | |
Shuffle Join | 支持 | 不支持 | |
Colocate Join | 支持 | 支持 | |
自定义函数 | 支持 | 暂不支持 | |
支持结果缓存 | 支持查询结果缓存 | 暂不支持,有计划研发 | |
内存字典 | 不支持 | 支持 | |
内存表 | 不支持 | 支持 | |
扩展性 | 协议 | 支持JDBC/ODBC协议 | 支持JDBC/ODBC |
标准SQL | 兼容标准SQL | 兼容性稍差 | |
容器部署 | 不支持 | 支持 | |
外表 | 外查MySQL/ES/Hive的表 | 支持MySQL/Hive的表 | |
管理性 | 元数据自动同步 | 支持 | 不支持 |
副本自动均衡 | 支持 | 不支持 | |
数据备份 | 支持 | 不支持 | |
监控和报警 | 支持 | 支持 | |
多租户和资源隔离 | 弱 | 支持,强 | |
集群间迁移数据 | 弱 | 强,Remote或Copier | |
权限/安全/审计 | 权限 | 支持 | 支持,强 |
审计 | 支持 | 支持,强 | |
端到端加密 | 暂无 | 暂无 | |
网络隔离 | 暂无 | 暂无 | |
两者都有的局限 | 无法高频插入 | ||
Update/Delete效率不高 | |||
DDL/DML操作后台异步 | |||
跨数据中心数据一致性不完善 | |||
作者:李海波
1. Google mesa:https://storage.googleapis.com/pub-tools-public-publication-data/pdf/42851.pdf
2. Oracle Berkeley DB High Availability:https://www.oracle.com/technetwork/database/database-technologies/berkeleydb/overview/berkeleydb-je-ha-whitepaper-132079.pdf
3. ClickHouse内核分析-ZooKeeper在分布式集群中的作用https://developer.aliyun.com/article/762917
4. ClickHouse Polymorphic Parts特性浅析https://www.jianshu.com/p/f3881fae4b9e
5. Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask http://www.vldb.org/pvldb/vol11/p2209-kersten.pdf
6. 【Doris全面解析】存储层设计介绍1——存储结构设计解析
7. 最佳实践|Apache Doris Join 实现与调优实践