Rollup (汇总)
保留历史数据以供分析非常有用,但由于归档海量数据的经济成本,通常会被避免。例如,您的系统每秒可能生成 500 个文档。这每天会产生 4300 万个文档,每年近 160 亿个文档。因此,数据保留期往往是由财务现实而非大量历史数据的有用性所驱动的。
虽然您的分析师和数据科学家可能希望您无限期地存储这些数据以进行分析,但时间是无止境的,因此您的存储需求将无限制地增长。因此,保留策略通常由随时间推移的存储成本计算以及组织愿意为保留历史数据支付的费用来决定。这些策略通常会在几个月或几年后开始删除数据。
存储成本是一个固定量。存储 Y 数据需要 X 金钱。但是,数据的效用往往会随时间而改变。以毫秒级粒度收集的传感器数据在当前非常有用,如果是几周前的数据则用处尚可,而如果是几个月前的数据,其用处就微乎其微了。
因此,虽然存储十年前一毫秒传感器数据的成本是固定的,但该单个传感器读数的价值往往会随时间而降低。它并非毫无用处——它很容易就能为有用的分析做出贡献——但其降低的价值往往导致被删除,而不是支付固定的存储成本。
这就是 Rollup 发挥作用的地方。Rollup 功能将旧的高粒度数据汇总为降低粒度的格式,以便长期存储。通过将数据“汇总”(rolling up)成单个摘要文档,与原始数据相比,历史数据可以得到极大的压缩。
例如,考虑每天生成 4300 万个文档的系统。秒级数据对于实时分析非常有用,但针对十年数据的历史分析很可能会在更大的时间间隔(例如每小时或每日趋势)上进行。
如果我们将这 4300 万个文档压缩为每小时的摘要,就可以节省大量空间。Rollup 功能可自动完成此汇总历史数据的过程。
有关设置和配置 Rollup 的详细信息,请参阅 创建作业 API (Create Job API)。
Rollup 功能公开了一个新的搜索端点(/_rollup_search,区别于标准的 /_search),它知道如何搜索汇总后的数据。重要的是,该端点完全支持 100% 普通的 Elasticsearch 查询 DSL。您的应用程序不需要学习新的 DSL 来检查历史数据,它可以直接重用现有的查询和仪表板。
可用功能存在一些限制;并非支持所有的查询和聚合,某些搜索功能(例如高亮显示)被禁用,并且可用字段取决于 Rollup 的配置方式。这些限制将在 Elasticsearch 中的 Rollup 搜索限制 中详细介绍。
但是,如果您的查询、聚合和仪表板仅使用可用功能,那么将它们重定向到历史数据将非常简单。
Rollup 的一个有用功能是能够在单个查询中同时查询“实时”数据和历史“已汇总”数据。
例如,您的系统可能会保留一个月内的原始数据。一个月后,它会使用 Rollup 汇总为历史摘要,并删除原始数据。
如果您查询原始数据,您只能看到最近一个月的数据。如果您查询已汇总的数据,您只能看到超过一个月的数据。但是,RollupSearch 端点支持同时查询两者。它将从两个数据源获取结果并将它们合并在一起。如果“实时”数据和“已汇总”数据之间存在重叠,则优先使用实时数据以提高准确性。
最后,Rollup 能够智能地利用可用的最佳时间间隔。如果您使用过其他产品的汇总功能,您会发现它们可能会受到限制。如果您以每日间隔配置汇总……您的查询和图表只能使用每日间隔。如果您需要每月间隔,则必须创建另一个明确存储月度平均值的汇总,依此类推。
Rollup 功能存储数据的方式使得查询可以识别最小的可用间隔并将其用于处理。如果您以每日间隔存储汇总,则可以在每日或更长的时间间隔(每周、每月等)上执行查询,而无需明确配置新的汇总作业。这有助于缓解汇总系统的一个主要缺点;相对于原始数据的灵活性降低。