简化InfluxDB:保留策略最佳实践
作者:Margo Schaedel / 产品,用例,开发者,公司
2018年6月20日
导航至
保留策略在大多数情况下可能很棘手,但在处理时间序列数据时,设置适当的保留策略来自动过期(删除)不必要的数据,可以从长远角度节省大量时间。本文将介绍一些关于如何使用InfluxDB创建最佳保留策略的通用指南。
等等...什么是保留策略?
在我们开始讨论保留策略的最佳实践之前,了解它们到底是什么非常重要。尽管其名称有一定的解释性,但InfluxDB保留策略在文档中被定义为
描述InfluxDB数据结构中数据保留时长(持续时间)、在集群中存储数据的副本数(副本因子)以及分片组覆盖的时间范围(分片组持续时间)的部分。RPs在每个数据库中是唯一的,并与测量和标签集一起定义一个系列。
当你创建数据库时,InfluxDB会自动创建一个名为autogen的保留策略,其持续时间为无限,副本因子设置为1,分片组持续时间设置为7天。
保留策略规定了数据将保留和存储多长时间。由于时间序列数据迅速积累,最佳实践是在数据不再相关时将其从InfluxDB丢弃或下采样。因为时间序列数据很容易积累,所以在数据不再有用时,你肯定希望将其从InfluxDB中丢弃或下采样。如果你还需要进一步的证明,请查看以下博客文章
通用指南
在设置数据库的保留策略时,需要考虑几个关键因素。首先,你需要考虑你的用例需要保留数据多长时间。你需要保留一周?一个月?一年?这个决定将具体指导你设置保留策略的持续时间,这是不可协商的。
但等等 - 你还没有完成。设置保留策略的另一个重要部分是确定所有将遵循此保留策略的数据的分区组持续时间。这里事情变得复杂。因为分区实际上代表了数据库的核心物理部分,调整分区组持续时间到合适的设置可以真正最大化性能,因此,正确设置它非常重要。
将持续时间设置得较高会导致每个分区中数据集合更大。在查询数据库时可能会出现问题。例如,如果你查询数据库的时间窗口比分区组时间跨度短,数据库可能需要解码更长块的数据才能读取分区的时间范围的一个子集,这个过程将需要更多努力和时间。
另一方面,如果你将分区组持续时间设置得较短,结果将是分区组数量更多。由于时间序列索引,每个分区将有一些额外的开销,形式为这种索引和元数据,因此拥有成千上万的分区,每个分区只有少量数据,绝对不是高效的。
我的建议是像金发姑娘一样,尝试所有设置,直到找到完美的位置!
好了,不开玩笑 - 我们在InfluxData建议将分区组持续时间设置如下
- 分区组持续时间应该是你最长典型查询时间范围的两倍 - 没错,这意味着你需要考虑你将在InfluxDB上运行哪些类型的查询。
- 分区组持续时间应该设置,使得每个分区组最终包含至少100,000个点/组 - 你希望每个分区有更多数据,但不要太多数据。
- 分区组持续时间应该设置,使得每个分区组至少有1,000个点/序列。
总结
如果你刚开始使用InfluxDB,设置数据库模式和保留策略有时可能感觉是一项艰巨的任务。尤其是在处理非常特殊的情况,如处理非常大的集群(Influx Enterprise)或非常长或短的保留期时。你肯定会想花些时间调整保留持续时间和分区组持续时间,直到找到合适的设置。毕竟,金发姑娘试了三次,对吧?一旦找到那个恰到好处的设置,就在@InfluxDB和@mschae16上发推文告诉我们吧!