这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
一、数据库基本概念:
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统(DBMS)来控制。在现实中,数据、DBMS及关联应用一起被称为数据库系统,通常简称为数据库。
关系数据库:关系数据库是把数据以表的形式进行存储,然后再在各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。
非关系数据库:NoSQL或非关系数据库,支持存储和操作非结构化及半结构化数据。
单机数据库:在一台计算机上完成数据的存储和查询的数据库系统。
分布式数据库:分布式数据库由位于不同站点的两个或多个文件组成。
存储引擎:管理内存数据结构、管理磁盘数据、读写算子
二、列式存储:
优点:
查询时只有涉及到的列会被读取。
投影很高效。
任何列都能作为索引。
便于做延迟物化和向量化计算。
压缩效率高,每一列可以使用不同的压缩算法。
缺点:
选择完成时,被选择的列要重新组装。
INSERT/UPDATE比较麻烦。
点查询不合适。
适用场景:
统计分析类查询、即时查询。
三、ClickHouse存储设计:
分布式表:不存储数据,用于将查询路由到集群的各个节点。
本地表:实际存储数据的表。
索引设计:
Hash索引:
将输入的key通过一个HashFunction映射到一组bucket上。
每个bucket都包含一个指向一条记录的地址。
哈希索引在查找的时候只适用于等值比较。
B-Tree:
数据写入是有序的,支持增删改查。
每个节点有多个孩子节点。
每个节点都按照升序排列key值。
每个key有两个指向左右孩子节点的引用。
B++Tree:
所有的数据都存储在叶子节点,非叶子节点只保存key值。
叶子节点维护到相邻叶子节点的引用。
可以通过key值做二分查找,也可以通过叶子节点做顺序访问。