KUDU学习笔记(二)

存储架构

Kudu的存储是将一个Table 拆分成多个Tableat进行存储的。当然不是指像Hbase一样,当一个Region数据量达到一定大小后进行动态的拆分。Kudu在建表时需要事先制定分区数量。可以通过Range或Hash的方式来进行分区,分多少个区就存在多少个Tablet。需要注意的是这两种分区方式只能通过主键来进行操作,Range只能根据单个主键进行分区。Hash则可以根据多个主键进行分区。

Table
Tablet
Tablet
Metadata
RowSet
RowSet
MemRowSet
DiskRowSet
DiskRowSet
BloomFile
AdhocIndex
UndoFile
Redofile
BaseData
MemDelta

每个Tablet中都会存在一个Metadata,用来存放该Tablet中存在着哪些RowSet和各个RowSet存放的位置(我猜测是这样,网上资料实在太少。。)
有兴趣的同学可以打开看一下 在/kudu/tablet/data下
存放着一些.metadata文件和.data文件

Rowset则是存放真正数据的地方包括 MemRowset和 DiskRowSet。

MemRowSet:
用于存储insert和update的数据,写满MemRowSet所在的内存后会进行一次flush,将全部数据写入磁盘(DIskRowSet)中并重新生成一个空的MemRowSet区域
MemRowSet是行式存储,可以并发的进行访问。虽然是行式存储,但是由于数据量不大,并且是在内存中所以速度还是可以让人接受的。
MemRowSet写入磁盘后会生成一个或多个DIskRowSet文件(每32M会生成一个DiskRowSet文件,方便后期的compaction即压缩合并)

DiskRowSet分为:

BloomFile:是根据主键生成的一个过滤文件,用来快速模糊的判断某个主键知否存在与这个DiskRowSet中;

AdhocIndex:主键的索引,用它来确定主键的偏移量,方便快速地找到数据;

BaseData:MemRowSet flush下来的数据,按列存储,按主键有序;

DeltaMem:当进行更新的数据存在与DiskRowSet时会写入相应的DiskRowSet所在的DeltaMem中

RedoFile:当DeltaMem写满时,会写入RedoFile中(redofile可能存在多个)当RedoFile达到一定数量时会进行compaction(合并压缩)默认1000个文件合并一次

UndoFile:是BaseData compaction 之前的数据,RedoFile和BaseData合并后会生成新的UndoFile

注:在进行更新操作时如果要更新的数据存在于MemRowSet上时,更新的数据会在MemRowSet上找到他所在的行,将更新记录记录在一个mutation链表中,落盘时合并在BaseData上
更新的数据在DiskRowSet上时,会在对应的DiskRowSet上的DeltaMem写入记录,达到一定大小时写入RedoFile。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值