clickhouse常规的优化方法

在这里插入图片描述

一、建表优化

1.1日期字段避免使用String存储

建表时能用数值型或日期时间型表示的字段就不要用字符串,全String 类型在以Hive
为中心的数仓建设中常见,但ClickHouse 环境不应受此影响。
虽然ClickHouse 底层将DateTime 存储为时间戳Long 类型,但不建议存储Long 类型,因为DateTime 不需要经过函数转换处理,执行效率高、可读性好。

1.2 空值存储类型

在ClickHouse表中数据存储时,对于一些列尽量不使用Nullable类型存储,因为此类型需要单独创建额外的文件来存储NULL的标记并且Nullable类型列无法被索引,会拖累性能,在数据存储时如果有空值时,我们可以选择在业务中没有意义的值来替代NULL值。
比如:用户ID或商品ID,用-1表示没有ID

1.3 分区和索引

ClickHouse中一般选择按天分区,可以指定tuple()指定多个列为组合分区。如果不按天分区,每个分区数据量控制在800~1000万为宜。
建表时通过order by 指定索引列,可以指定tuple(),指定多个列为索引列,指定索引列时最好满足高基列在前、查询频率大的列在前的原则。基数过大的列不适合作为索引列,因为如果某列基数特别大,这种情况有索引和没索引效果一样。如用户表的userid 字段;通常筛选后的数据满足在百万以内为最佳。

在这些分区索引的作用下,进行数据查询时能够快速跳过不必要的数据分区目录,从而减少最终需要扫描的数据范围。

比如官方案例的hits_v1 表:

PARTITION BY toYYYYMM(EventDate) 
ORDER BY (CounterID, EventDate, intHash32(UserID)) 

visits_v1 表:

PARTITION BY toYYYYMM(StartDate) 
ORDER BY (
### ClickHouse Sync 使用方法及场景 #### 数据同步工具 `synch` `synchSync` 是一个用于将其他数据库中的数据同步到 ClickHouse 集群的工具[^1]。此工具支持多种源数据库,并能够高效地处理大规模的数据迁移任务。 对于希望保持两个不同存储系统之间数据一致性的用户来说,`synchSync` 提供了一种简便的方法来实现这一目标。通过配置相应的连接参数和映射规则,可以轻松设置从源数据库到 ClickHouse 的持续增量更新机制。 #### 物理顺序与物化视图的应用 由于 ClickHouse 只维护单一物理顺序,该顺序由表定义时指定的 `ORDER BY` 子句决定,在某些情况下可能无法满足复杂查询需求。为了应对这种情况并引入额外索引结构,推荐使用物化视图来进行二次加工后的数据存储[^2]。这不仅有助于优化特定模式下的读取性能,同时也允许开发者灵活调整底层数据布局而不影响原始表格设计。 #### 不同引擎的选择依据 当考虑采用何种类型的 MergeTree 引擎时,需根据实际业务逻辑做出判断: - **MergeTree**: 适用于大多数常规分析型工作负载,默认选择即可提供良好的平衡性。 - **ReplacingMergeTree**: 当存在大量重复键值记录且希望通过版本号等方式自动去重时,则应优先选用此类引擎[^3]。 综上所述,针对具体应用场景合理挑选合适的组件和技术手段至关重要;无论是利用外部工具完成跨平台间的数据流转还是内部架构层面的设计决策都值得深入探讨。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值