ClickHouse 列存储 | 青训营笔记

56 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 18 天

SQL的优点

  1. 标准化,ISO和ANSI是长期建立使用的SQL数据库标准
  2. 高度非过程化,用SQL进行数据操作,用户只需要提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
  3. 以同一种语法结构提供两种使用方式,用户可以在终端直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、C#、java)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。
  4. 语言简洁,易学易用:SQL功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。

列式存储

  • 数据压缩:
    • 数据压缩可以使读的数据量更少,在IO密集型计算中获得更大的性能优势
    • 相同类型压缩效率更高
    • 排序之后压缩效率更高
    • 可以针对不同类型使用不同的压缩算法
  • LZ4:
    • (5,4)代表向前5个byte,匹配到的内容长度有4,即“bcde”是一个重复
    • 重复项越多或者越长,压缩率就会越高
  • Run-length encoding:
    • 压缩重复的数据
    • 可以在压缩数据上直接计算
  • Delta encoding:
    • 将数据存储为连续数据之间的差异,而不是直接存储数据本身
    • 特定算子也能直接在压缩数据上计算
  • 数据选择:
    • 可以选择特定的列做计算而不是读所有列
    • 对聚合计算友好
  • 延时物化:
    • 缓存友好
    • CPU/内存带宽友好
    • 可以利用到执行计划和算子的优化
    • 保留直接在压缩列做计算的机会
  • 向量化:
    • SIMD
    • 数据格式
    • 执行模型
  • 执行模型要求:
    • 数据需要按批读取
    • 函数的调用需要明确数据类型
  • 列存数据库合适设计出这样的执行模型,从而使用向量化技术:
    • 按列读取
    • 每种列类型定义数据读写逻辑
    • 函数按列类型处理

查询优化

  • 构建多个主键索引
    • 再建一个表,使用需要优化的字段做主键第一位:1.数据需要同步两份。2.查询需要用户判断哪张表。
    • 建一个物化视图:可以通过select查询将一个表的数据写入一张隐式表
    • 使用Projection:类似于物化试图,但是不是将数据写入新的表,而是存储在原始表中,以一个列文件的形式存在。

ClickHouse应用场景

  • 大宽表存储和查询
  • 离线数据分析
  • 使用memory table减少parts数量
  • 复杂类型查询

总结

通过本次课程使我了解了ClickHouse列存储的优势和使用的场景等。