阿里云TimeStream系列--TimeStream downsample原理

TimeStream内置了downsample功能,用户可以直接通过简单的配置,就能用到时序场景常用的downsample功能。

我们来看一个简单的downsample配置:

PUT _time_stream/test_stream
{
  "time_stream": {
    "downsample": [
      {
        "interval": "1m",
        "settings": {
           "index.lifecycle.name": "my-rollup-ilm-policy_60m",
           "index.number_of_shards": "1"
        }
      },
      {
        "interval": "10m"
      }
    ]
  }
}

创建test_stream索引时,指定了2个downsample配置。一个是1分钟精度的donwsample规则,一个是10分钟精度的downsample。

downsample具体使用可见:https://help.aliyun.com/document_detail/437036.html#section-f4y-zgp-fvk

这里有详细的介绍。

这里主要简单说下TimeStream downsample原理。

TimeStream downsample功能利用了前面说到的ES的downsample功能。downsample提供了原子API,可以将一个索引downsample成指定精度的索引。

TimeStream就是使用这个接口,然后增加了调度功能。在索引进行rollover后,旧的索引一段时间不再写入后(目前TimeStream会等到旧索引24小时不再写入数据),将索引设置write block,然后开始对索引进行downsample操作。

这里TimeStream有个优化,在配置多个downsample规则时,TimeStream会对interval进行排序,downsample使用的原索引不是原始索引,而是上一个downsample索引。比如上述interval=10m的downsample操作,TimeStream是将interval=1m的索引作为原索引,而不是原始索引。

优化前:
source_index -> interval_1m_index
source_index -> interval_10m_index

优化后:
source_index -> interval_1m_index -> interval_10m_index

由于使用了更粗粒度的索引作为downsample原索引,可以极大的加速downsample的时间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容