使用ClickHouse时有哪些注意点?
分区和索引
分区粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区,也可指定为tuple();以单表1亿数据为例,分区大小控制在10-30个为最佳。
必须指定索引列,clickhouse中的索引列即排序列,通过order by指定,一般在查询条件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索引;通常需要满足高级列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,如用户表的userid字段;通常筛选后的数据满足在百万以内为最佳。
数据采样策略
通过采用运算可极大提升数据分析的性能。
数据量太大时应避免使用select *操作,查询的性能会与查询的字段大小和数量成线性变换;字段越少,消耗的IO 资源就越少,性能就会越高。
千万以上数据集用order by查询时需要搭配where条件和limit语句一起使用。如非必须不要在结果集上构建虚拟列,虚拟列非常消耗资源浪费性能,可以考虑在前端进行处理,或者在表中构造
实际字段进行额外存储。
不建议在高基列上执行distinct去重查询,改为近似去重 uniqCombined。多表Join时要满足小表在右的原则,右表关联时被加载到内存中与左表进行比较。
存储
ClickHouse不支持设置多数据目录,为了提升数据io性能,可以挂载虚拟券组,一个券组绑定多块物理磁盘提升读写性能;多数查询场景SSD盘会比普通机械硬盘快2-3倍。
-
分区和索引
分区粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区,也可指定为tuple();以单表1亿数据为例,分区大小控制在10-30个为最佳。
必须指定索引列,clickhouse中的索引列即排序列,通过order by指定,一般在查询条件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索引;通常需要满足高级列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,如用户表的userid字段;通常筛选后的数据满足在百万以内为最佳。数据采样策略
通过采用运算可极大提升数据分析的性能。
数据量太大时应避免使用select *操作,查询的性能会与查询的字段大小和数量成线性变换;字段越少,消耗的IO 资源就越少,性能就会越高。
千万以上数据集用order by查询时需要搭配where条件和limit语句一起使用。如非必须不要在结果集上构建虚拟列,虚拟列非常消耗资源浪费性能,可以考虑在前端进行处理,或者在表中构造
实际字段进行额外存储。
不建议在高基列上执行distinct去重查询,改为近似去重 uniqCombined。多表Join时要满足小表在右的原则,右表关联时被加载到内存中与左表进行比较。存储
ClickHouse不支持设置多数据目录,为了提升数据io性能,可以挂载虚拟券组,一个券组绑定多块物理磁盘提升读写性能;多数查询场景SSD盘会比普通机械硬盘快2-3倍。
1个月前