做网站要有哪些知识,网站建设 百度贴吧,计算机专业大学排名,红叶网站建设方案文章目录 背景问题定位优化方式排序键设计写入顺序压缩算法 DoubleDeltaLowCardinality避免使用Nullable 总结 背景
clickhouse集群容量告警#xff0c;项目中某些表占据大量的存储空间#xff0c;借此机会对ck的存储优化进行实践学习#xff0c;并通过多种方式测试验证优化… 文章目录 背景问题定位优化方式排序键设计写入顺序压缩算法 DoubleDeltaLowCardinality避免使用Nullable 总结 背景
clickhouse集群容量告警项目中某些表占据大量的存储空间借此机会对ck的存储优化进行实践学习并通过多种方式测试验证优化效果。
问题定位
通过查询系统表元数据定位头部存储的表。之前的文章有具体查询逻辑。如果能通过清理或者是控制表生命周期是最快的方式不然就要看具体的表各列的存储压缩大小。以下图为例压缩率在10以下的就是比较低的。
优化方式
要着手优化最好标准自然是参考官方的最佳实践。
排序键设计
按基数升序排列关键列能提升存储压缩率和查询效率。 https://clickhouse.com/docs/en/optimize/sparse-primary-indexes#ordering-key-columns-efficiently
hits_URL_UserID_IsRobot具有复合主键的表(URL, UserID, IsRobot)其中我们按基数降序排列关键列hits_IsRobot_UserID_URL具有复合主键的表(IsRobot, UserID, URL)其中我们按基数按升序对键列进行排序
压缩率 查询效率 这里官方有提供效果验证就不在重复。
写入顺序
除了低基数列在前通过对数据进行排序也能提升压缩效率。 因为ck物理存储同分区里也是分数据块的一个数据块中的数据更有序也能提升存储效率。
压缩算法 DoubleDelta
在定位问题时我们发现唯一键row_key 的压缩率不到2一部分原因是该字段写入ck时是乱序的另外就是使用合适的压缩算法。 ck默认的算法是LZ4原理是按照4字节窗口扫描查找与之前的值是否匹配。但如果我们是有序是列可以使用另外两个压缩算法 Delta/DoubleDelta (Delta编码存储一个基础值以及后续相邻两个数据的差值, Double Delta是在Delta基础上再做一次Delta等差数列压缩相当优秀) 我们可以看下有序和无序的数据在不同压缩算法的差异。Double Delta再压缩有序列效率可谓“遥遥领先”。
LowCardinality
低基数建议使用LowCardinality。 相同数据Android/IOS 枚举压缩后大小差异近6倍。
避免使用Nullable
相同数据没有Nullable 压缩率更高
总结
以上是我们在优化存储时主要尝试的方案具体优化还要结合业务情况来定。