Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

传感器数设备数Hash 结构B+ 树时间差
641282565121024最优配置耗时641282565121024最优配置耗时
1010.81.431.612.091.240.81.122.732.271.7421.12-40.00%
10100013.0112.414.4113.8113.112.46.157.417.787.057.856.1550.40%
101000036.1837.3237.7132.9733.832.9715.8119.4414.9715.417.1614.9754.60%
1010000044.834.142.837.636.534.143.646.74340.444.340.4-18.48%
101000000131108139117116108173153176206162153-41.67%
50014.013.924.314.444.693.923.383.773.192.722.932.7230.61%
500100037.228.831.436.53328.826.325.724.720.319.419.432.64%
50010000937882.577707098881128987.587.5-25.00%
500200001651261401701371261551481251311311250.79%
100,000135.7635.0938.233.6533.4433.4413.1713.0114.9310.6114.3110.6168.27%
100,000100139162173189158139275240149231174149-7.19%


如图所示:

Image Modified

Image Modified

从查询速度来看,Hash结构的索引在时间序列条数较大的情况下表现较好(超过5000,000条)。这是因为Hash结构的索引在查询过程中,仅需要两次 I/O(第一次获得 buckets 的个数和大小,第二次反序列化对应的 buckets);而 B+ 树索引在时间序列条数较小时,可能仅需要一次 I/O,即使需要两次 I/O,其反序列化大小可能也会小于 bucket 的大小。因此,B+ 树索引在大多数场景下,无论是原始数据查询速度还是聚合查询的速度,都会有优势。

Image Modified

从索引文件大小来看,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)。