
图4-22 CU结构示意图
如图4-22所述,cstore的存储单元是CU,分别包括以下内容。
(1) CU的CRC值,为CU结构中除CRC成员之外,其他所有字节计算出的32位CRC值。
(2) CU的magic值,为插入CU的事务号。
(3) CU的属性值,为16位标志值,包括CU是否包含NULL行、CU使用的压缩算法等CU粒度属性信息。
(4) 压缩后NULL值位图长度,如果属性值中标识该CU包含NULL行,则本CU在实际数据内容开始处包含NULL值位图,此处储存该位图的字节长度,如果该CU不包含NULL行,则无该成员。
(5) 压缩前数据长度,即CU数据内容在压缩前的字节长度,用于读取CU时进行内存申请和校验。
(6) 压缩后数据长度,即CU数据内容在压缩后的字节长度,用于插入CU时进行内存申请和校验。
(7) 压缩后NULL值位图内容,如果属性值中标识该CU包含NULL行,则该成员即为每行的NULL值位图,否则无该成员。
(8) 压缩后数据内容,即实际写入磁盘的CU主体数据内容。
每个CU最多保存对应字段的MAX_BATCH_ROWS行(默认60000行)数据。相邻CU之间按8kB对齐。
CU模块提供的主要CU操作接口如表4-28所示。
表4-28 CU操作接口
| 函数名称 | 接口含义 |
| AppendCuData | 向组装的CU中增加一行(仅对应字段) |
| Compress | 压缩(若需)和组装CU |
| FillCompressBufHeader | 填充CU头部 |
| CompressNullBitmapIfNeed | 压缩NULL值位图 |
| CompressData | 压缩CU数据 |
| CUDataEncrypt | 加密CU数据 |
| ToVector | 将CU数据解构为向量数组结构 |
| UnCompress | 解压(若需)和解析CU |
| UnCompressHeader | 解析CU头部内容 |
| UnCompressNullBitmapIfNeed | 解压NULL值位图 |
| UnCompressData | 解压CU数据 |
| CUDataDecrypt | 解密CU数据 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




