使用ClickHouse时有哪些注意点?

分区和索引

分区粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区,也可指定为tuple();以单表1亿数据为例,分区大小控制在10-30个为最佳。
必须指定索引列,clickhouse中的索引列即排序列,通过order by指定,一般在查询条件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索引;通常需要满足高级列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,如用户表的userid字段;通常筛选后的数据满足在百万以内为最佳。

数据采样策略

通过采用运算可极大提升数据分析的性能。
数据量太大时应避免使用select *操作,查询的性能会与查询的字段大小和数量成线性变换;字段越少,消耗的IO 资源就越少,性能就会越高。
千万以上数据集用order by查询时需要搭配where条件和limit语句一起使用。如非必须不要在结果集上构建虚拟列,虚拟列非常消耗资源浪费性能,可以考虑在前端进行处理,或者在表中构造
实际字段进行额外存储。
不建议在高基列上执行distinct去重查询,改为近似去重 uniqCombined。多表Join时要满足小表在右的原则,右表关联时被加载到内存中与左表进行比较。

存储

ClickHouse不支持设置多数据目录,为了提升数据io性能,可以挂载虚拟券组,一个券组绑定多块物理磁盘提升读写性能;多数查询场景SSD盘会比普通机械硬盘快2-3倍。

回复

共1条回复 我来回复
  • 迷失技术de小猪
    迷失技术de小猪
    稍等伙伴们,思考简介中~
    评论

    分区和索引

    分区粒度根据业务特点决定,不宜过粗或过细。一般选择按天分区,也可指定为tuple();以单表1亿数据为例,分区大小控制在10-30个为最佳。
    必须指定索引列,clickhouse中的索引列即排序列,通过order by指定,一般在查询条件中经常被用来充当筛选条件的属性被纳入进来;可以是单一维度,也可以是组合维度的索引;通常需要满足高级列在前、查询频率大的在前原则;还有基数特别大的不适合做索引列,如用户表的userid字段;通常筛选后的数据满足在百万以内为最佳。

    数据采样策略

    通过采用运算可极大提升数据分析的性能。
    数据量太大时应避免使用select *操作,查询的性能会与查询的字段大小和数量成线性变换;字段越少,消耗的IO 资源就越少,性能就会越高。
    千万以上数据集用order by查询时需要搭配where条件和limit语句一起使用。如非必须不要在结果集上构建虚拟列,虚拟列非常消耗资源浪费性能,可以考虑在前端进行处理,或者在表中构造
    实际字段进行额外存储。
    不建议在高基列上执行distinct去重查询,改为近似去重 uniqCombined。多表Join时要满足小表在右的原则,右表关联时被加载到内存中与左表进行比较。

    存储

    ClickHouse不支持设置多数据目录,为了提升数据io性能,可以挂载虚拟券组,一个券组绑定多块物理磁盘提升读写性能;多数查询场景SSD盘会比普通机械硬盘快2-3倍。

    1个月前 0条评论
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载