**clickhouse的缺点**
1:不支持事务,不适合处理业务逻辑
2:Log引擎不支持物理删除(对于数据错误只能进行逻辑删除),只有MergeTree引擎可以对数据进行更新删除操作(binlog同步时表的引擎也需是MergeTree)
3:需要批量写入,频繁的单条写入可能会产生Too many part报错,建议每次1000行以上
4:高并发支持不够好,qps默认100,可设置
**clickhouse的优点**
快,根据官网的介绍,在相同的配置与数据量下,响应速度是
Vertica的2.63倍(一款收费的列示存储数据库),
InfiniDB的17倍(可伸缩的分析数据库引擎,基于mysql搭建)
MonetDB的27倍(开源的列式数据库)
Hive的126倍
Mysql的429倍
**clickhouse的数据类型**
<span style="margin-left:10px;">1:Int,Int8,16,32,64范围是-2N次方-1 ~ 2N次方-1-1,
<span style="margin-left:10px">2:Uint,UInt8,16,32,64,范围是0~2N次方-1
<span style="margin-left:10px">3:Float32:float,Float64:double
<span style="margin-left:10px">4:String,无固定长度字符串,任意字节,类似于mysql的text
<span style="margin-left:10px">5:FixedString,FixedString类型和传统意义上的Char类型有些类似,对于一些字符有明确长度的场合,可以使用固定长度的字符串。定长字符串通过FixedString(N)声明,其中N表示字符串长度。但与Char不同的是,FixedString使用null字节填充末尾字符,而Char通常使用空格填充。与String相比,极少会使用FixedString,因为使用起来不是很方便
<span style="margin-left:10px">6:Decimal:
Decimal32(s)-(-1*10^(9-s),1*10^(9-s))
Decima64(s)-(-1*10^(18-s),1*10^(18-s))
Decimal128(s)-(-1*10^(38-s),1*10^(38-s))
例如,Decimal32(4) 可以表示 -99999.9999 至 99999.9999 的数值,步长为0.0001
<span style="margin-left:10px">7:时间类型
时间类型分为DateTime、DateTime64、Date三类。ClickHouse目前没有时间戳类型。时间类型最高的精度是秒,也就是说,如果需要处理毫秒、微秒等大于秒分辨率的时间,则只能借助UInt类型实
DateTime
用四个字节(无符号的)存储 Unix 时间戳,最小值为 0000-00-00 00:00:00,时间戳类型值精确到秒。DateTime类型包含时、分、秒信息,精确到秒,支持使用字符串形式写入
DateTime64可以记录亚秒,它在DateTime之上增加了精度的 设置
Date类型不包含具体的时间信息,只精确到天,它同样也支持字符串形式写入
<span style="margin-left:10px">8:其他格式,如数组,元祖,枚举,ip等,文档可查看
**clickhouse的引擎类型(最常用的是Log引擎与MergeTree引擎)**
1:clickhouse的引擎类型主要有Log,MergeTree,integration,Special
2:Log:log系列表引擎功能相对简单,主要用于快速写入小表,然后全部取出的场景,不支持update,不支持delete(若数据有错或字段类型错误可建新表,然后执行以下sql:
INSERT INTO NEW_TABLE
SELECT CAST(COLUMN “字段类型”).......
FROM OLD_TABLE;
然后RENAME TABLE OLD_TABLE TO NEW_TABLE;修改表名,尝试过5000万数据修改字段,几秒钟;
insert会阻塞select操作