kudu数据库个人简单的总结

swazerz 2020-06-14

1.kudu事物
strong的事务,kudu的事务和架构受spanner和calvin系统的启发 Transaction Semantics ( 事务语义 )
不支持多行事物。

2.查询条件关联语句,应用场景,性能测试
创建关联表
CREATE TABLE spark_kudu_test(id1 int, id2 int, id3 string) USING org.apache.kudu.spark.kudu OPTIONS("kudu.master" "node1:7051,node2:7051,node3:7051","kudu.table" "kudu_test");

应用场景
适用于既有随机访问,也有批量数据扫描的复合场景
适用于高计算量的场景
充分利用高性能存储设备
支持数据更新,避免数据反复迁移
支持跨地域的实时数据备份和查询

性能测试
天级别读:源数据2.8亿,541.7 G,耗时10min,平均46.6w条/s
小时级别写
源数据2000W行,38G,耗时1.4min,平均23w条/s
天级别更新列:
源数据4.74亿行,10个新列,耗时17min,平均46.5w条/s (其中包括读800G的text格式hive表的时间,真实插入时间更少)

3.缺陷
随机更新会变慢:HBase可以不用扫描硬盘进行随机更新,而Kudu需要在更新之前进行关键值查找,在插入前进行Bloom查找
单行读取可能会变慢:列式存储设计是为了全表扫描做的优化,未来可能会为单行访问的应用引入“列组”的概念
只有主键可以设置range分区,且只能由一个主键,也就是一个表只能有一个字段range分区,且该字段必须是主键
kudu的shell客户端不提供表schema查看。如果你不通过imapla连接kudu,且想要查看表的元数据信息,需要用spark加载数据为dataframe,通过查看dataframe的schema查看表的元数据信息。

4.优势
支持update和upsert操作
结构化数据模型
与imapla或spark集成后,可通过sql操作,使用方便
一个table由多个tablet组成,对分区查看、扩容和数据高可用支持非常好
扫描大数据量时吞吐率高
随机访问数据时延时低
通过高CPU性能发挥RAM和Flash潜力
IO效率高

5.持久化存储
Kudu是一种完全的列式存储引擎,表中的每一列数据都是存放在一起,列与列之间都是分开的。
为了能够保存一部分历史数据,并实现MVCC,Kudu将数据分为三个部分。一个部分叫做base data,是当前的数据;第二个部分叫做UNDO records,存储的是从插入数据时到形成base data所进行的所有修改操作,修改操作以一定形式进行组织,实现快速查看历史数据;第三个部分是REDO records,存储的是还未merge到当前数据中的更新操作。

6.宽表问题 ,建表后加列
在批量读取和批量写入速度上(宽表,字段90+),Kudu都比HBase要快很多,Kudu使用bulk load写空表不超过2分钟、读取Hfile的方式kudu读取一天的数据在10分钟左右
impala 或hive 给指定kudu库中的表添加列,修改列并调整列位置
alter TABLE spark_kudu_test add columns(column_name string COMMENT ‘字段名称‘);

alter TABLE spark_kudu_test CHANGE column_name column_name STRING AFTER doc_id;

7.单条数据性能
Kudu可支持一些分析性查询的基础。每一个Column的数据被存储在一个相邻的数据区域,而这个数据区域进一步被细分成一个个的小的Page单元,与HBase File中的Block类似,对每一个Column Page可采用一些Encoding算法,以及一些通用的Compression算法。 既然可对Column Page可采用Encoding以及Compression算法,那么,对单条记录的更改就会比较困难了
Kudu可支持单条记录级别的更新/删除, 把DiskRowSet分为了两部分:base data、delta stores。base data 负责存储基础数据,delta stores负责存储 base data 中的变更数据.
Kudu简单来说就是加强版的Hbase,除了像hbase一样可以高效的单条数据查询,他的表结构是类型关系型数据库的。集合impala可以达到复杂sql的实时查询。
如果是存粹的随机读写,或者单行的检索请求这类场景,由于这些Tradeoff的存在,HBASE的性能吞吐率是要优于Kudu不少的(2倍到4倍),kudu的优势还是在支持类SQL检索这样经常需要进行投影操作的批量顺序检索分析场合。

相关推荐