- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
sstable的存储结构与sstablewriter接口
Sstable的存储结构与SstableWriter接口编号版本修订章节修订原因修订日期修订人11.0全文新建2010-9-30华庭 正祥22.0增加对column group的支持,多表时的block,schema的扁平化,bloomfilter增加对列的记录2011-3-16华庭 正祥Sstable的存储结构简单易于扩展的Sstable存储结构便于管理,不容易出错,Oceanbase系统中尽量简化Sstable的存储结构,并充分考虑到Sstable的只读特性和磁盘顺序读写相对性能比较高,SstableWriter通过顺序写来创建Sstable文件,Sstable中的数据以block为存储单位,便于压缩,校验和索引。1.1 总体存储结构0Block-0Block-1Block-2Block-3 …Block indexBloom filterObTableSchemaObSstableTrailer(非压缩)ObSSTableTrailerOffset所有block从SSTable文件头开始顺序存放。除了最后一行ObSSTableTrailerOffset,上图中每一行都是sstable文件的一个记录(record),存储时会对每个record计算checksum,并将该checksum存在record的头部中。ObSSTableTrailerOffset为8个字节,存储于Sstable文件的最后(网络字节序),指示了ObSstableTrailer记录在文件中的相对于文件头的偏移值。1.2 记录结构:record头实际数据(PayLoad)每个record包括两部分,记录头和实际的数据(PayLoad)。记录头包含了record的长度和校验信息等,之后紧跟着记录的实际数据(PayLoad)。各种PayLoad有自身的格式,也可能有自身的头信息等,例如每个SSTable Block就是一个记录,其PayLoad中有SSTable头、行数据、行索引等信息。1.2.1 记录头格式:struct ObRecordHeader {int16_t magic_;// magic numberint16_t header_length_; // header长度 int16_t version_; // 版本号 int16_t header_checksum_;// header checksum int64_t reserved_;// 保留,必须置0 int32_t data_length_; // 压缩前的数据长度 int32_t data_zlength_; // 磁盘上的数据长度,未压缩时等于压缩前的数据长度// 压缩时为压缩后数据长度,data_zlength = data_length// 如果二者相等,表明数据没有压缩int64_t data_checksum_; // 写入磁盘中数据的checksum,不包含记录头};header_checksum采用简单的奇偶校验,data_checksum采用CRC64算法。该部分数据不经过序列化存储,每个项以网络序保存。1.2.2 SSTable Block存储结构每个SSTable Block是一个记录,其PayLoad包含了SSTableBlock头信息、排序行数据以及行索引信息等,如下图所示:SSTableBlockHeader行数据[0]行数据[1]……行数据[row_count_-1]行索引数组[row_count_+1]SSTableBlockHeader定义:struct ObSSTableBlockheader{ int32_t row_index_array_offset_; // 行索引数组相对PayLoad起始点的偏移值 int32_t row_count_; // 该block中行数int16_t reserved16_;//保留字段,必须为0,v2.0修改uint16_t column_group_id_;// column_group_id,v2.0修改uint32_t table_id_;// table id};其中column_group_id默认值为0。该部分数据不经过序列化存储,每个项以网络序保存。行数据格式:SSTableBlock的行数据有三种格式:稠密格式(dense)、稀疏格式(sparse)和混合格式(mixed),此处只定义了前两种,即稠密格式和稀疏格式,混合格式留待日后定义。稠密格式(dense)的定义:rowkey +ObObjs[]其中rowkey由rowkey_length(2字节,存储时为网络字节序) + rowkey字符串组成,ObObjs[]为该行全部列的值(value
文档评论(0)