学习过程中碰到了trevni,trevni的资料不多,学习起来比较吃力。我总结了自己学习的一些知识,肯定不完善,先写下来,以后再补充。
普通的数据集一般都设计成很多行和很多列,每条记录就是一行,每个字段作为一列。写入记录时,就是把一行又一行写入文件,就像hadoop的sequence file。在一些情况下,列存储的性能比行存储会高很多。trevni就是一种列存储格式。数据集被分成多个row groups,每个row group包含很多行。具体的跟块大小有关。每个row group以列格式组织,所有的row groups组成整个数据集。
treni设计目标:
1.尽量增大row group的size。访问磁盘很消耗时间,所以减少访问磁盘的次数是很好的。
2.允许随即访问任意一个row group。某些查询会先查询一列,找到满足条件的列,再查询其他列。
3.尽量减少数据集分成的file数目。每个数据集会分成很多row groups。每个row group就是一个file。hadoop的master节点会管理所有file的信息,因此file的数目越少越好。
4.支持多个row groups之间的列合作。row group是在操作数据集的元单位。
5.保证数据完整。
6.保持高扩展性。
设计:
1.每个row group是一个单独的文件。文件中的列的所有值都是连续写入的。这最大化了row group的size,当查询少量列时,能优化性能。
2.一个file占单独一个hdfs的block。
3.文件的中每列被写成连续的64KB的压缩块。
4.元数据信息会被加到文件,列和block层。
5.每个bolck会加入checkSum。以保证数据完整。
trevni支持的数据类型:
- null, requires zero bytes. Sometimes used in array columns.
- boolean, one bit, packed into bytes, little-endian;
- int<