Table of Contents |
---|
(I) Experiment of the necessity of TimeseriesMetadata
Jira | ||||||
---|---|---|---|---|---|---|
|
...
- Although the index area structure with no TimeseriesMetadata speeds up a little in raw data query,
it reduces the speed a lot in aggregation query. => We should reserve TimeseriesMetadata. - The time cost does not change in the data area of TsFile.
(II) Experiment about combine Chunk and Page
Jira | ||||||
---|---|---|---|---|---|---|
|
...
- one level index in one TsFile.
- Suitable for small Chunk (Mass Timeseries) scenario, in which 1 chunk has only 1~2 pages
(Note: Since 0.12, If one Chunk has only one Page, then PageStatistics will be removed, we only store statistics in ChunkMetadata)
(III) Experiment about how to store PageHeader
Jira | ||||||
---|---|---|---|---|---|---|
|
...
(b) combine PageHeader with ChunkHeader
当前的读取方式为:将 Chunk 全都读取到内存后读取。
如果按照这样的方式,则 (a) (b) 两者所用的时间相同。
如果按照精细方式进行逐块读取,分析如下:
For raw data query in a Chunk:
...
分析:假设 Chunk 中共有 n 个 Page,满足时间过滤要求的 Page 有 m 个 个,读 PageHeader 耗时为 th,读 PageData 耗时为 td, seek 耗时为 ts
(a) 顺序读 前几个 Page,然后开始顺序读后面的 PageData
需要读 n 个 PageHeader,m 个 PageData,seek (n - m) 次。耗时为 n * (th + ts) + m * (td - ts) 次
(b) 顺序读 前几个 PageHeader,然后开始顺序读后面的 PageData需要读 (n - m) 个 PageHeader,m 个 PageData,seek 1 次顺序读 前几个 PageHeader,然后开始顺序读后面的 PageData
需要读 (n - m) 个 PageHeader,m 个 PageData,seek 1 次。耗时为 n * th + m * (td - th) + ts
前者比后者耗时多Δt = (n - 1) * ts + m * (th - ts),由于 n >= 1, th > ts(读 PageHeader 也需要 seek, 因此 th > ts),
因此 Δt >0,后者耗时一定比前者少。
举例:
假设 Chunk 中有6个 Page,其中前两个 Page 是不符合时间过滤要求的
...
分析:假设 Chunk 中共有 n 个 Page,满足时间过滤要求的 Page 有 m 个 个,读 PageHeader 耗时为 th,读 PageData 耗时为 td, seek 耗时为 ts
(a) 顺序读前几个符合时间过滤条件的 Page
需要读 m 个 PageHeader,m 个 PageData,seek 0次0次。耗时为 m * (th + td)
(b) 顺序读前几个 PageHeader,然后开始顺序读一部分的 PageData
需要读 m 个 PageHeader,m 个 PageData,seek 1次1次。耗时为 m * (th + td) + ts
举例:
假设 Chunk 中有6个 Page,其中前两个 Page 是符合时间过滤要求的
...