这是我参与「第五届青训营」伴学笔记创作活动的第18天。
前言
这届青训营我的最后一节课了,确认过眼神,是没听过的概念-列存储。让我浅浅地整理一下吧,就跟着课堂上的四大部分来记录,也算是个总结了。
笔记内容
1.数据库基本概念
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统 (DBMS) 来控制。在现实中,数据、DBMS 及关联应用一起被称为数据库系统,通常简称为数据库。
这是官方定义,但是数据库是什么,想必作为一个后端程序员,大家都很熟悉了,包括数据库的分类以及SQL的执行流程等,其实在前面的笔记和课程中都已经有所涉猎,就不赘述这个东西了。毕竟,今天的重点是了解我们不熟悉的列存储。
2.列式存储
其实根据上课讲的,这么说吧,我们平常大部分时候都使用的是行式存储。可以想想,平时我们在使用MySQL查询的时候,不管是单条记录还是多条记录,它最终查询出来的都是一行行的数据;而列式存储则与它相反,根据字段的列查询出来一列列的数据。
相比于行存,它的优点是:①数据压缩可以使读的数据量更少,在IO密集型计算中获得大的性能优势;②数据处理更加便捷,如在某些选择特定的列做计算的场景下更有优势;③可以使用向量化的技术。
3.ClickHouse的存储设计
这一部分的内容在青训营资料中非常详细,我会在文末引用出来,从ClickHouse自身的架构到其存储的架构以及索引的设计到数据查询都讲的非常详细,以后有需要我会再翻出来看看。
4.ClickHouse的典型使用场景
①大宽表存储和查询;②离线数据分析;③实时数据分析;④杂类型查询
小结
其实从它的设计到使用场景,虽然说我对它有了一定认识,但是并没有那种非用不可的感觉。单纯从使用场景来说,它的这些场景在Java后端开发中都已经有成熟的技术在使用了,感觉没有必要去自己硬搞,但是也不是完全没用。我认为这节课最大的收获是学习了列式存储的思想,如果以后自己有能力搞这方面的“轮子”,这个设计理念就可以很好地应用进去了。