Skip to the content.

如何选择适合指标收集服务的数据库?

有许多存储系统专门针对时序数据进行了优化。这种优化使我们可以使用更少的服务器来处理相同量级的数据。其中许多数据库还拥有专门设计用于分析时序数据的自定义查询接口,比 SQL 更易于使用。有些数据库甚至提供了数据保留(data retention)和数据聚合(data aggragation)的功能。以下是一些时序数据库的示例。

OpenTSDB 是一个分布式时序数据库,但因为它基于 HadoopHBase,运行 Hadoop/HBase 集群会增加复杂性。Twitter 使用MetricsDB,亚马逊提供 Timestream 作为时序数据库。根据 DB-engines 的数据,目前最受欢迎的两个时序数据库是 InfluxDBPrometheus,它们都设计用于存储大量的时序数据,并能快速对该数据进行实时分析。它们两者主要依赖于内存缓存和磁盘存储,并且它们都处理耐用性和性能相当好。根据基准测试,一个具有 8 个内核和 32GB 内存的 InfluxDB 可以处理超过每秒 250,000 次的写入。

由于时间序列数据库是专门的数据库,除非您在简历中明确提到了它,否则在面试中不需要了解其内部工作原理。对于面试而言,重要的是要理解指标(metrics)数据具有时间序列性质,并且我们可以选择时间序列数据库(例如InfluxDB)来存储它们。

强大的时间序列数据库的另一个特点是通过标签(在某些数据库中称为“标记”)高效地聚合和分析大量的时间序列数据。例如,InfluxDB在标签上构建索引,以便通过标签快速查找时间序列。它提供了清晰的最佳实践指南,以确保在不过载数据库的情况下使用标签。关键是确保每个标签的基数低(具有小的可能值集)。这个特点对于可视化非常关键,如果使用通用数据库来构建此功能,需要付出大量的努力。

选择什么样的数据库用于指标收集系统?

对于一个指标收集系统,我们需要选择一个能够有效存储时间序列数据的数据库,例如 InfluxDB、Prometheus 等专门用于存储时间序列数据的数据库,这些数据库专门针对时间序列数据进行了优化,使得我们可以使用更少的服务器来处理相同数量的数据。这些数据库还提供了专门设计用于分析时间序列数据的自定义查询接口,比SQL更易于使用。此外,它们还提供管理数据保留和数据聚合的功能。

一个好的时间序列数据库还需要能够高效地按标签(有些数据库中称为标记)对大量时间序列数据进行聚合和分析。例如,InfluxDB 可以建立在标签上的索引,以便通过标签快速查找时间序列。这个功能对于可视化至关重要,而在通用数据库中构建这个功能需要很大的工作量。

总之,我们不建议使用自己构建的存储系统或通用存储系统(如MySQL)来存储时间序列数据,因为它们不是为此任务而优化的。通用数据库理论上可以支持时间序列数据,但需要专业的调优才能使其在我们的规模下工作。在我们的规模下,需要花费大量的精力来调优数据库,即使这样,它也可能无法表现良好。

NoSQL 数据库怎么样呢?从理论上讲,市场上有一些 NoSQL 数据库可以有效地处理时间序列数据。例如,CassandraBigtable 都可以用于时间序列数据。然而,这需要对每个 NoSQL 的内部工作有深入的了解,才能设计可扩展的模式,以有效地存储和查询时间序列数据。由于有许多面向工业规模的时间序列数据库可用,因此使用通用 NoSQL 数据库并不具有吸引力。有许多存储系统可用于针对时间序列数据进行优化。这种优化使我们可以使用更少的服务器来处理相同数量的数据。许多这样的数据库也有特别为时间序列数据分析设计的自定义查询接口,比 SQL 容易使用得多。有些甚至提供管理数据保留和数据聚合的功能。这里有一些时间序列数据库的例子。