...
此实验旨在得出 MetadataIndexTree 的 max_degree_of_index_node 配置项最佳参数。
传感器数 | 设备数 | 64 | 128 | 256(默认) | 512 | 1024 | 文件数 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | |||
10 | 1 | 102 | 3.13 | 1.9 | 102 | 2.29 | 1.34 | 102 | 3.13 | 2.69 | 102 | 3.4 | 1.78 | 102 | 2.62 | 1.44 | 100 |
10 | 1000 | 54176 | 17.32 | 6.81 | 53951 | 16.52 | 6.87 | 53832 | 16.9 | 7.99 | 53772 | 16.7 | 9.18 | 53716 | 15.96 | 8.26 | 100 |
10 | 10000 | 551642 | 34.26 | 20.49 | 549300 | 31.76 | 21.25 | 548095 | 31.72 | 18.31 | 547478 | 33.95 | 20.3 | 547169 | 32.27 | 19.26 | 100 |
10 | 100000 | 5617377 | 118.1 | 50.7 | 5593480 | 117.3 | 50.9 | 5580851 | 100.1 | 49.3 | 5574575 | 109.2 | 50.6 | 5571449 | 100.3 | 46.6 | 10 |
10 | 1000000 | 57189153 | 637 | 162 | 56941946 | 498 | 173 | 56811965 | 618 | 183 | 56747338 | 409 | 129 | 56715083 | 457 | 121 | 1 |
500 | 1 | 592 | 5.1 | 3.34 | 517 | 5.29 | 3.22 | 479 | 5.24 | 3.37 | 461 | 6.77 | 3.8 | 461 | 5.49 | 3.1 | 100 |
500 | 1000 | 567086 | 53.6 | 27.8 | 491861 | 48.8 | 26.4 | 453742 | 43.6 | 23.4 | 435682 | 46.1 | 25.6 | 435626 | 42.6 | 22.6 | 10 |
500 | 10000 | 5680719 | 177.5 | 83.5 | 4928377 | 139 | 80 | 4547172 | 141 | 79 | 4366555 | 140 | 76 | 4366246 | 155 | 93 | 2 |
500 | 20000 | 11372629 | 360 | 130 | 9867943 | 287 | 142 | 9105435 | 306 | 133 | 8744207 | 262 | 152 | 8743579 | 252 | 148 | 1 |
10,0000 | 1 | 111416 | 21.34 | 12.03 | 94548 | 20.11 | 13.98 | 86219 | 19.92 | 12.31 | 82088 | 20.63 | 12.3 | 80040 | 20.87 | 11.45 | 100 |
10,0000 | 100 | 11138809 | 323 | 211 | 9451954 | 290 | 195 | 8619054 | 333 | 192 | 8205954 | 251 | 185 | 8001154 | 256 | 160 | 1 |
(
...
VIII) B+ Tree 的最佳配置
Jira | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
此实验旨在得出 B+ Tree 的 max_degree_of_index_node 配置项最佳参数。
传感器数 | 设备数 | 64 | 128 | 256 | 512 | 1024 | 文件数 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | |||
10 | 1 | 92 | 2.2 | 1.31 | 92 | 5.55 | 2.25 | 92 | 3.58 | 1.98 | 92 | 3.39 | 1.65 | 92 | 2.79 | 1.98 | 100 |
10 | 1000 | 36328 | 14.93 | 6 | 36031 | 16.7 | 7.36 | 35876 | 15.88 | 6.75 | 35798 | 16.84 | 8.48 | 35724 | 18.66 | 7.71 | 100 |
10 | 10000 | 373090 | 26.08 | 15.94 | 370019 | 25.08 | 19.35 | 368463 | 25.54 | 15.38 | 367666 | 23.22 | 16.4 | 367267 | 26.62 | 16.94 | 100 |
10 | 100000 | 3831677 | 73.6 | 42.8 | 3800589 | 77.9 | 45.4 | 3784396 | 69.5 | 41.5 | 3776347 | 58.4 | 44.3 | 3772339 | 63.5 | 40.8 | 10 |
10 | 1000000 | 39332027 | 258 | 194 | 39012829 | 289 | 158 | 38847280 | 369 | 125 | 38764968 | 296 | 118 | 38723884 | 194 | 132 | 1 |
500 | 1 | 645 | 4.56 | 3.13 | 534 | 5.77 | 3.86 | 478 | 4.98 | 3.1 | 451 | 5.06 | 2.81 | 451 | 8.67 | 3.03 | 100 |
500 | 1000 | 629692 | 38.9 | 37.6 | 507555 | 45.3 | 32.4 | 446835 | 46.9 | 26.2 | 417708 | 52.4 | 20.8 | 417634 | 35.8 | 16.8 | 10 |
500 | 10000 | 6377591 | 149 | 85.5 | 5115229 | 153.5 | 93.5 | 4487990 | 167.5 | 80 | 4186743 | 147 | 93 | 4186344 | 134.5 | 75.5 | 2 |
500 | 20000 | 12845401 | 238 | 155 | 10275117 | 316 | 148 | 8998201 | 229 | 125 | 8384575 | 259 | 131 | 8383767 | 264 | 131 | 1 |
10,0000 | 1 | 125689 | 21.19 | 13.5 | 101630 | 20.14 | 14.08 | 89737 | 23.26 | 15 | 83833 | 18.48 | 9.93 | 80903 | 21.64 | 13.88 | 100 |
10,0000 | 100 | 12710845 | 340 | 211 | 10228850 | 311 | 279 | 9004533 | 247 | 219 | 8399129 | 277 | 199 | 8096000 | 321 | 158 | 1 |
...
对于泽嵩树和 B+ 树在不同场景和不同配置下,原始数据查询耗时:
传感器数 | 设备数 | 泽嵩树 | B+ 树 | 时间差 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | 64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | 时间差|||
10 | 1 | 3.13 | 2.29 | 3.13 | 3.4 | 2.62 | 2.29 | 2.2 | 5.55 | 3.58 | 3.39 | 2.79 | 2.2 | 3.93% |
10 | 1000 | 17.32 | 16.52 | 16.9 | 16.7 | 15.96 | 15.96 | 14.93 | 16.7 | 15.88 | 16.84 | 18.66 | 14.93 | 6.45% |
10 | 10000 | 34.26 | 31.76 | 31.72 | 33.95 | 32.27 | 31.72 | 26.08 | 25.08 | 25.54 | 23.22 | 26.62 | 23.22 | 26.80% |
10 | 100000 | 118.1 | 117.3 | 100.1 | 109.2 | 100.3 | 100.1 | 73.6 | 77.9 | 69.5 | 58.4 | 63.5 | 58.4 | 41.66% |
10 | 1000000 | 637 | 498 | 618 | 409 | 457 | 409 | 258 | 289 | 369 | 296 | 194 | 194 | 52.57% |
500 | 1 | 5.1 | 5.29 | 5.24 | 6.77 | 5.49 | 5.1 | 4.56 | 5.77 | 4.98 | 5.06 | 8.67 | 4.56 | 10.59% |
500 | 1000 | 53.6 | 48.8 | 43.6 | 46.1 | 42.6 | 42.6 | 38.9 | 45.3 | 46.9 | 52.4 | 35.8 | 35.8 | 15.96% |
500 | 10000 | 177.5 | 139 | 141 | 140 | 155 | 139 | 149 | 153.5 | 167.5 | 147 | 134.5 | 134.5 | 3.24% |
500 | 20000 | 360 | 287 | 306 | 262 | 252 | 252 | 238 | 316 | 229 | 259 | 264 | 229 | 9.13% |
100,000 | 1 | 21.34 | 20.11 | 19.92 | 20.63 | 20.87 | 19.92 | 21.19 | 20.14 | 23.26 | 18.48 | 21.64 | 18.48 | 7.23% |
100,000 | 100 | 323 | 290 | 333 | 251 | 256 | 251 | 340 | 311 | 247 | 277 | 321 | 247 | 1.59% |
聚合查询耗时:
传感器数 | 设备数 | 泽嵩树 | B+ 树 | 时间差 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | 64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | 时间差|||
10 | 1 | 1.9 | 1.34 | 2.69 | 1.78 | 1.44 | 1.34 | 1.31 | 2.25 | 1.98 | 1.65 | 1.98 | 1.31 | 2.24% |
10 | 1000 | 6.81 | 6.87 | 7.99 | 9.18 | 8.26 | 6.81 | 6 | 7.36 | 6.75 | 8.48 | 7.71 | 6 | 11.89% |
10 | 10000 | 20.49 | 21.25 | 18.31 | 20.3 | 19.26 | 18.31 | 15.94 | 19.35 | 15.38 | 16.4 | 16.94 | 15.38 | 16.00% |
10 | 100000 | 50.7 | 50.9 | 49.3 | 50.6 | 46.6 | 46.6 | 42.8 | 45.4 | 41.5 | 44.3 | 40.8 | 40.8 | 12.45% |
10 | 1000000 | 162 | 173 | 183 | 129 | 121 | 121 | 194 | 158 | 125 | 118 | 132 | 118 | 2.48% |
500 | 1 | 3.34 | 3.22 | 3.37 | 3.8 | 3.1 | 3.1 | 3.13 | 3.86 | 3.1 | 2.81 | 3.03 | 2.81 | 9.35% |
500 | 1000 | 27.8 | 26.4 | 23.4 | 25.6 | 22.6 | 22.6 | 37.6 | 32.4 | 26.2 | 20.8 | 16.8 | 16.8 | 25.66% |
500 | 10000 | 83.5 | 80 | 79 | 76 | 93 | 76 | 85.5 | 93.5 | 80 | 93 | 75.5 | 75.5 | 0.66% |
500 | 20000 | 130 | 142 | 133 | 152 | 148 | 130 | 155 | 148 | 125 | 131 | 131 | 125 | 3.85% |
100,000 | 1 | 12.03 | 13.98 | 12.31 | 12.3 | 11.45 | 11.45 | 13.5 | 14.08 | 15 | 9.93 | 13.88 | 9.93 | 13.28% |
100,000 | 100 | 211 | 195 | 192 | 185 | 160 | 160 | 211 | 279 | 219 | 199 | 158 | 158 | 1.25% |
...
以10传感器、1000000设备场景下的索引文件大小为例,如图所示:
(IX) Hash 结构的 TsFileMetadata 的最佳配置
Jira | ||||||
---|---|---|---|---|---|---|
|
此实验旨在得出 Hash 结构的 TsFileMetadata 的配置项最佳参数。此配置项意为 bucket 中所预估能承装的最多 entry 个数。
注意:此配置项并不意味着 bucket 中实际承装的最多的 entry 个数。
传感器数 | 设备数 | 64 | 128 | 256 | 512 | 1024 | 文件数 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | 大小 | 原始查询 | 聚合查询 | |||
10 | 1 | 323 | 2.38 | 0.8 | 323 | 3.24 | 1.43 | 323 | 2.68 | 1.61 | 323 | 3.59 | 2.09 | 323 | 2.88 | 1.24 | 100 |
10 | 1000 | 358554 | 21.49 | 13.01 | 354467 | 21 | 12.4 | 322415 | 20.3 | 14.41 | 321055 | 21.42 | 13.81 | 299216 | 20.83 | 13.1 | 100 |
10 | 10000 | 3690057 | 43.84 | 36.18 | 3859716 | 45.06 | 37.32 | 3831173 | 42.67 | 37.71 | 3192012 | 41 | 32.97 | 3137622 | 40.9 | 33.8 | 100 |
10 | 100000 | 42029427 | 51.9 | 44.8 | 37094251 | 51.1 | 34.1 | 39810357 | 55.2 | 42.8 | 35431664 | 49.8 | 37.6 | 33074163 | 44.9 | 36.5 | 10 |
10 | 1000000 | 467325307 | 265 | 131 | 445059682 | 231 | 108 | 360181380 | 247 | 139 | 359116142 | 203 | 117 | 344193693 | 227 | 116 | 1 |
500 | 1 | 15370 | 6.01 | 4.01 | 15030 | 8.06 | 3.92 | 14862 | 7.93 | 4.31 | 14804 | 9.4 | 4.44 | 14804 | 7.73 | 4.69 | 100 |
500 | 1000 | 22453638 | 54.8 | 37.2 | 18381461 | 42.7 | 28.8 | 17340676 | 44.4 | 31.4 | 16831660 | 47.5 | 36.5 | 16258755 | 46.9 | 33 | 10 |
500 | 10000 | 295537667 | 128 | 93 | 202805838 | 126 | 78 | 196892734 | 155 | 82.5 | 175055958 | 143 | 77 | 171447421 | 129 | 70 | 2 |
500 | 20000 | 612012806 | 298 | 165 | 471700306 | 260 | 126 | 382095722 | 243 | 140 | 393160417 | 239 | 170 | 348939968 | 259 | 137 | 1 |
10,0000 | 1 | 4085496 | 44.01 | 35.76 | 3361582 | 44.19 | 35.09 | 3334603 | 46.76 | 38.2 | 3330193 | 40.5 | 33.65 | 3284622 | 42.96 | 33.44 | 100 |
10,0000 | 100 | 484356557 | 290 | 139 | 422794057 | 253 | 162 | 380728518 | 237 | 173 | 391851774 | 225 | 189 | 348139157 | 241 | 158 | 1 |
综合(VIII)(IX)两个实验:
对于 B+ 树和 Hash 结构索引在不同场景和不同配置下,原始数据查询耗时:
传感器数 | 设备数 | Hash 结构 | B+ 树 | 时间差 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | 64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | |||
10 | 1 | 2.38 | 3.24 | 2.68 | 3.59 | 2.88 | 2.38 | 2.65 | 4.3 | 2.85 | 2.35 | 3.14 | 2.35 | 1.26% |
10 | 1000 | 21.49 | 21 | 20.3 | 21.42 | 20.83 | 20.3 | 15.35 | 15.38 | 15.62 | 16.4 | 17.17 | 15.35 | 24.38% |
10 | 10000 | 43.84 | 45.06 | 42.67 | 41 | 40.9 | 40.9 | 25.67 | 26.08 | 23.46 | 23.1 | 24.11 | 23.1 | 43.52% |
10 | 100000 | 51.9 | 51.1 | 55.2 | 49.8 | 44.9 | 44.9 | 78 | 65.4 | 57.5 | 54.9 | 59.8 | 54.9 | -22.27% |
10 | 1000000 | 265 | 231 | 247 | 203 | 227 | 203 | 327 | 361 | 293 | 226 | 252 | 226 | -11.33% |
500 | 1 | 6.01 | 8.06 | 7.93 | 9.4 | 7.73 | 6.01 | 4.61 | 4.93 | 4.56 | 4.57 | 8.71 | 4.56 | 24.13% |
500 | 1000 | 54.8 | 42.7 | 44.4 | 47.5 | 46.9 | 42.7 | 42.7 | 44.7 | 43.9 | 39.3 | 39.7 | 39.3 | 7.96% |
500 | 10000 | 128 | 126 | 155 | 143 | 129 | 126 | 155.5 | 170.5 | 151.5 | 152 | 131.5 | 131.5 | -4.37% |
500 | 20000 | 298 | 260 | 243 | 239 | 259 | 239 | 261 | 272 | 248 | 232 | 233 | 232 | 2.93% |
100,000 | 1 | 44.01 | 44.19 | 46.76 | 40.5 | 42.96 | 40.5 | 21.04 | 19.43 | 20.64 | 17.43 | 20.9 | 17.43 | 56.96% |
100,000 | 100 | 290 | 253 | 237 | 225 | 241 | 225 | 339 | 289 | 310 | 303 | 290 | 289 | -28.44% |
聚合查询耗时:
传感器数 | 设备数 | Hash 结构 | B+ 树 | 时间差 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | 64 | 128 | 256 | 512 | 1024 | 最优配置耗时 | |||
10 | 1 | 0.8 | 1.43 | 1.61 | 2.09 | 1.24 | 0.8 | 1.12 | 2.73 | 2.27 | 1.74 | 2 | 1.12 | -40.00% |
10 | 1000 | 13.01 | 12.4 | 14.41 | 13.81 | 13.1 | 12.4 | 6.15 | 7.41 | 7.78 | 7.05 | 7.85 | 6.15 | 50.40% |
10 | 10000 | 36.18 | 37.32 | 37.71 | 32.97 | 33.8 | 32.97 | 15.81 | 19.44 | 14.97 | 15.4 | 17.16 | 14.97 | 54.60% |
10 | 100000 | 44.8 | 34.1 | 42.8 | 37.6 | 36.5 | 34.1 | 43.6 | 46.7 | 43 | 40.4 | 44.3 | 40.4 | -18.48% |
10 | 1000000 | 131 | 108 | 139 | 117 | 116 | 108 | 173 | 153 | 176 | 206 | 162 | 153 | -41.67% |
500 | 1 | 4.01 | 3.92 | 4.31 | 4.44 | 4.69 | 3.92 | 3.38 | 3.77 | 3.19 | 2.72 | 2.93 | 2.72 | 30.61% |
500 | 1000 | 37.2 | 28.8 | 31.4 | 36.5 | 33 | 28.8 | 26.3 | 25.7 | 24.7 | 20.3 | 19.4 | 19.4 | 32.64% |
500 | 10000 | 93 | 78 | 82.5 | 77 | 70 | 70 | 98 | 88 | 112 | 89 | 87.5 | 87.5 | -25.00% |
500 | 20000 | 165 | 126 | 140 | 170 | 137 | 126 | 155 | 148 | 125 | 131 | 131 | 125 | 0.79% |
100,000 | 1 | 35.76 | 35.09 | 38.2 | 33.65 | 33.44 | 33.44 | 13.17 | 13.01 | 14.93 | 10.61 | 14.31 | 10.61 | 68.27% |
100,000 | 100 | 139 | 162 | 173 | 189 | 158 | 139 | 275 | 240 | 149 | 231 | 174 | 149 | -7.19% |
如图所示:
从查询速度来看,Hash结构的索引在时间序列条数较大的情况下表现较好(超过5000,000条)。这是因为Hash结构的索引在查询过程中,仅需要两次 I/O(第一次获得 buckets 的个数和大小,第二次反序列化对应的 buckets);而 B+ 树索引在时间序列条数较小时,可能仅需要一次 I/O,即使需要两次 I/O,其反序列化大小可能也会小于 bucket 的大小。因此,B+ 树索引在大多数场景下,无论是原始数据查询速度还是聚合查询的速度,都会有优势。
从索引文件大小来看,Hash结构的索引区大小远大于B+树索引区文件大小和泽嵩树索引区文件大小。随着传感器数量的增多,此比例会越来越大,如在100000传感器的场景下,索引区文件大小比例可能达到 43:1。
以10传感器-1000设备场景为例,在配置项为1024的情况下:
Hash结构中,需要在索引区存储所有的时间序列名称。每一个 bucket 大小为29140,共有10个bucket(10 × 1000 ÷ 1024向上取整为10),总计约为284.57KB。算上BoomFilter后约为292.2KB。
B+树结构中,由于在叶子节点层就开始做稀疏索引,因此索引区所存储的时间序列并不是全部的时间序列。在这个场景中,由于每个设备有10传感器,因此存储的时间序列数是全部时间序列数的1/10。索引区大小总结约34.89KB。
Hash结构的索引区大小约为B+树结构索引区大小的8.38倍。不算BloomFilter,Hash结构的索引区大小约为B+树结构索引区大小的10.44倍(每一个entry多记录了一个VARINT类型的size)。