这里是 InfluxDB 的 CEO 和开发人员。下一个版本的 InfluxDB (0.9.5) 将拥有我们的新存储引擎。使用该引擎,我们将能够有效地存储单个事件数据或定期采样的系列。即不规则和规则的时间序列。
InfluxDB 支持 int64、float64、bool 和 string 数据类型,每种数据类型使用不同的压缩方案。 Prometheus 只支持 float64。
对于压缩,0.9.5 版本将具有与 Prometheus 竞争的压缩。在某些情况下,我们会看到更好的结果,因为我们会根据所见改变时间戳的压缩。最好的情况是按精确间隔采样的常规系列。在默认情况下,我们可以将 1k 个点的时间戳压缩为 8 字节的起始时间、一个增量(之字形编码)和一个计数(也是之字形编码的)。
根据我们看到的数据形状,压缩后平均每个点
YMMV 基于您的时间戳、数据类型和数据形状。例如,具有大变量增量的纳秒级时间戳的随机浮点数将是最差的。
时间戳的可变精度是 InfluxDB 的另一个特性。它可以表示秒、毫秒、微秒或纳秒级时间。 Prometheus 固定为毫秒。
另一个区别是,在向客户端发送成功响应后,对 InfluxDB 的写入是持久的。 Prometheus 在内存中缓冲写入,默认情况下每 5 分钟刷新一次,这会打开一个潜在数据丢失的窗口。
我们希望一旦 InfluxDB 0.9.5 发布,它将成为 Prometheus 用户用作长期指标存储(与 Prometheus 结合使用)的不错选择。我很确定 Prometheus 已经提供了支持,但在 0.9.5 版本发布之前,它可能有点困难。显然,我们必须一起工作并进行大量测试,但这正是我所希望的。
对于单服务器指标摄取,我希望 Prometheus 具有更好的性能(尽管我们在这里没有进行测试并且没有数字),因为它们的数据模型更受限制,并且因为它们不会在写入之前将写入附加到磁盘出索引。
两者之间的查询语言非常不同。我不确定他们支持我们尚未支持的内容,反之亦然,因此您需要深入研究两者的文档,看看是否有您需要的东西。从长远来看,我们的目标是让 InfluxDB 的查询功能成为 Graphite、RRD、Prometheus 和其他时间序列解决方案的超集。我说超集是因为我们想在以后介绍除了更多分析函数之外的那些。显然,我们需要时间才能到达那里。
最后,InfluxDB 的长期目标是通过集群支持高可用性和水平可扩展性。当前的集群实现功能还不完整,仅处于 alpha 阶段。但是,我们正在努力,这是该项目的核心设计目标。我们的聚类设计是数据最终是一致的。
据我所知,Prometheus 的方法是对 HA 使用双重写入(因此没有最终的一致性保证)并使用联合来实现水平可扩展性。我不确定如何跨联合服务器进行查询。
在 InfluxDB 集群中,您可以跨服务器边界进行查询,而无需通过网络复制所有数据。那是因为每个查询都被分解成一种可以即时运行的 MapReduce 作业。
可能还有更多,但这是我目前能想到的。