Skip to content

Latest commit

 

History

History
63 lines (43 loc) · 2.54 KB

8-ModificationHandle.md

File metadata and controls

63 lines (43 loc) · 2.54 KB

查询中的数据修改处理

数据删除操作对磁盘数据只记录了 mods 文件,并未真正执行删除逻辑,因此查询时需要考虑数据删除的逻辑。

查询时每个时间序列会单独处理。针对一个时间序列,由大到小有 5 个层次:TsFileResource -> TimeseriesMetadata -> ChunkMetadata -> IPageReader -> BatchData

查询资源:TsFileResource 以及可能存在的 mods 文件,如果一个文件中有数据被删除了,将删除操作记录到 mods 文件中。记录三列:删除的时间序列,删除范围的最大时间点,删除操作对应的版本。

  • TsFileResource -> TimeseriesMetadata
// 只要这个时间序列有对应的 modification,就标记 TimeseriesMetadata 中的统计信息不可用
FileLoaderUtils.loadTimeseriesMetadata()
  • TimeseriesMetadata -> List<ChunkMetadata>
// 对于每个 ChunkMetadata,找到比其 version 大的所有 modification 中最大时间戳, 设置到  ChunkMetadata 的 deleteAt 中,并标记 统计信息不可用
FileLoaderUtils.loadChunkMetadataList()

对于以上示例,读取到的 ChunkMetadataList 为

  • ChunkMetadata -> List<IPageReader>
// 跳过被完全删除的 Page,将 deleteAt 设置到 PageReader 里,将数据被部分删除的 page 标记统计信息不可用
FileLoaderUtils.loadPageReaderList()
  • IPageReader -> BatchData
// 对于磁盘数据,跳过被删除的和过滤掉的,对于内存数据,跳过被过滤掉的
IPageReader.getAllSatisfiedPageData()