...
输入:多个文件的 ChunkMetadataListIterator(iterator简称iterator),Iterator 每次输出的 List 内的 sensor 个数为 max_index_degree(假设有3个文件:file1_Iterator 返回两批 sensor_list:(s1,s2),(s3) file2, file2_iterator:(s1, s3) file3_iterator:(s1,s2),(s3,s5))
输出:每轮待合并的 sensor 列表输出:List<sensor>
描述:每个 iterator 取1个 List,找到每个 List 的最大字典序的 sensor,组成集合 S,本次合并从头开始合并到 S 中最小字典序的 sensor_lex_min_lex_min,直到所有都合并完 。并从 List 中清除已合并的 sensor,如果此 List 消耗完,获取下一个 Lst
优势:每次至少会消耗完一个 file 的一个 List
...
- getNextSensors(List<ChunkMetadataListIterator> iterators)
第一轮:file1(s1,s2)+file2(s1,s3)+file3(s1,s2) → S= S=(s2, s3),最小字典序 sensor_lex_min 是 s2 → 从 s2, s3),最小字典序 sensor_lex_min 是 s2 → 从 s1 合并到 合并到 s2s2,输出 (s1,s2)
第二轮:file1(s3)+file2(s3)+file3(s3,s5) → S= S=(s3, s5, s5),最小字典序 sensor_lex_min 是 s3 → 从 s3 合到 s3,最小字典序 sensor_lex_min 是 s3 → 从 s3 合到 s3s3, 输出(s3)
第三轮:file3(s5) → → S=S=(s5),最小字典序 sensor_lex_min 是 s5 → 从 s5 合到 s5,最小字典序 sensor_lex_min 是 s5 → 从 s5 合到 s5s5,输出(s5)
反序列化Page合并算法
- 通过各自文件的reader有序把数据读出并整理出对应的time-value列表
- 遍历上述的time-value列表,将数据写入新的ChunkWriter
- 判断限流
- 将ChunkWriter写入新文件
...