ClickHouse基础知识及与MySQL性能对比

文章目录外部存储引擎 内部引擎SQL操作和操作alter操作 table 数据压缩 索引 性能 、-plus及整合 mysql数据迁移 待解决问题
介绍
是俄罗斯公司于2016年开源的一个列式数据库管理系统,在OLAP领域像一匹黑马一样,以其超高的性能受到业界的青睐 。特性:
不足:
如何理解OLTP和OLAP
OLTP是的英文缩写,指在线/联机事务处理,这么说其实还是比抽象的 。OLTP典型的应用领域包括银行、证劵等金融行业,电子商务系统等,在此举最经典的银行例子,我们在招商银行APP上查询账户余额、收支信息和转账记录,在ATM机上存钱,取钱,将招行账号的钱转到工行账号上 。这些都是典型的OLTP类操作,这些操作都比较简单,主要是对数据库中的数据进行增删改查 。操作主体一般是产品的用户 。
OLAP是的英文缩写,指联机分析处理 。从字面上我们能看出是做分析类操作 。通过分析数据库中的数据来得出一些结论性的东西 。比如给老总们看的报表,用于进行市场开拓的用户行为统计,不同维度的汇总分析结果等等 。操作主体一般是运营、销售和市场等团队人员而不是用户 。
单次OLTP处理的数据量比较小,所涉及的表非常有限,一般仅一两张表 。而OLAP是为了从大量的数据中找出某种规律性的东西,经常用到count()、sum()和avg()等聚合方法,用于了解现状并为将来的计划/决策提供数据支撑,所以对多张表的数据进行连接汇总非常普遍 。
为了表示跟OLTP的数据库()在数据量和复杂度上的不同,一般称OLAP的操作对象为数据仓库(data ),简称数仓 。数据库仓库中的数据,往往来源于多个数据库,以及相应的业务日志 。
下表是对OLTP和OLAP的简单总结 。
如何理解行式存储和列式存储
列式存储是指一列中的数据在存储介质中是连续存储的;行式存储是指一行中的数据在存储介质中是连续存储的 。简单的说,你可以把列式数据库认为是每一列都是一个表,这个表只有一列,如果只在该列进行条件查询,速度就很快 。
行数据库适用于读取出少行,多列的情况;列数据库相反,适用于读取出少数列,多数行的情况 。
列数据库可以节省空间,如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值 。
传统的行式数据库将一个个完整的数据行存储在数据页中 。这种方式在大数据量查询的时候会出现以下问题:在没有索引的情况下,会把一行全部查出来,查询会使用大量IO;虽然建立索引和物化视图可以可以快速定位列,但是也需要花费大量时间 。但是如果处理查询时需要用到大部分的数据列,这种方式在磁盘IO上是比较高效的 。
一般来说,OLTP(,联机事务处理)应用适合采用这种方式 。
列式数据库是将同一个数据列的各个值存放在一起 。插入某个数据行时,该行的各个数据列的值也会存放到不同的地方 。因此,列式数据库大大地提高了OLAP大数据量查询的效率 。当然,列式数据库不是万能的,每次读取某个数据行时,需要分别从不同的地方读取各个数据列的值,然后合并在一起形成数据行 。因此,如果每次查询涉及的数据量较小或者大部分查询都需要整行的数据,列式数据库并不适用 。
应用场景
1.绝大多数请求都是用于读访问的
2.数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作
3.数据只是添加到数据库,没有必要修改
4.读取数据时,会从数据库中提取出大量的行,但只用到一小部分列
5.表很“宽”,即表中包含大量的列