概念
架构
-
hbase
- master存储元数据、regionServer实际控制表数据,存储单位是Region,底层数据存储使用HDFS
-
hive
- 通过driver将sql分解成mapreduce任务
- 元数据需要单独存储到一个关系型数据库,一般是mysql
- 实际数据存储可以是外表,也可以是内表
-
clickhouse
- 单体架构分层类似mysql,集群状态下是多主,通过zookeeper通信
- 数据存储看引擎,最重要的引擎是mergeTree家族
- 部分引擎是不会存储数据的,比如kafka引擎。还有部分引擎其实是计算引擎,只会存储计算结果,不会保留原始数据,是适合作为物化表的引擎,比如aggregateMergeTree
数据库类型
-
hbase
- 本质是一款列数据库,oltp类型
- 依赖hadoop生态
-
hive
- 本质是将sql转化成mapreduce作业,依赖于hadoop的计算能力。存储可以是hdfs,也可以是hbase等其他构建在hdfs上的数据库
- 依赖hadoop生态
-
clickhouse
- 不依赖hadoop生态
- 理念是一切都是表
- 本质是一个olap系统的列式数据库,主要做即时查询
特性
join
-
hbase
- 没有join、group等复杂能力
-
hive
- 尽量不要做join操作,因为没有唯一键
- join时适合左小右大,因为hive是缓存前面的所有表,然后扫描最右边一张表。
-
clickhouse
- join时适合左大右小,因为ch会把右边的表加载到内存中。
-
mysql
- 原则上不需要我们自己考虑左右表的摆放,mysql自己会计算。
- 命中索引时适合左小右大,因为无论左右怎么放,此时的查询次数都是一样的。左小右大可以减少右边表的连接次数。
- 未命中索引时,适合左大右小,因为此时mysql会把右边的表加载到内存中
事务和锁
-
hbase
- 只支持单行事务
-
hive
- 不支持事务
- 只能锁表,不支持行级锁
-
clickhouse
- 不支持事务 </