这是我参与「第五届青训营 」伴学笔记创作活动的第 18 天
SQL的优点
- 标准化,ISO和ANSI是长期建立使用的SQL数据库标准
- 高度非过程化,用SQL进行数据操作,用户只需要提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
- 以同一种语法结构提供两种使用方式,用户可以在终端直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、C#、java)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。
- 语言简洁,易学易用: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列存储的优势和使用的场景等。