用途: 流感病毒数据库与普罗米修斯

普罗米修斯网页之后,普罗米修斯和流感病毒数据库的一个主要区别是用例: 普罗米修斯存储时间序列,而流感病毒数据库更适合存储单个事件。因为有一些主要的工作已经完成了,我不知道这是否仍然是真实的。

我想建立一个时间序列数据库,除了推/推模型(可能是性能上的差异) ,我看不出有什么大的事情将两个项目分开。有人能解释一下用例之间的区别吗?

48421 次浏览

IIRC 当前的普罗米修斯实现是围绕单个服务器上的所有数据配件设计的。如果你有大量的数据,它可能不适合普罗米修斯。

本站首席执行官兼开发人员。流感数据库的下一个版本(0.9.5)将拥有我们的新存储引擎。有了这个引擎,我们将能够有效地存储单个事件数据或定期采样的系列。即不规则和有规则的时间序列。

FluxDB 支持 int64、 float64、 bool 和 string 数据类型,每种数据类型使用不同的压缩方案。

对于压缩,0.9.5版本将具有与普罗米修斯竞争的压缩能力。对于某些情况,我们将看到更好的结果,因为我们根据所看到的改变时间戳的压缩。最好的情况是按精确的间隔抽样一个常规序列。默认情况下,我们可以将1k 个时间戳压缩为8字节的开始时间、 delta (zig-zag 编码)和 count (也是 zig-zag 编码)。

根据数据的形状,我们可以看到压缩后平均每点 < 2.5个字节。

基于时间戳、数据类型和数据形状的 YMMV。例如,具有纳秒级时间戳和大变量 delta 的随机浮动将是最糟糕的。

时间戳中的可变精度是影响数据库具有的另一个特性。它可以表示秒、毫秒、微秒或纳秒级时间。普罗米修斯定位在毫秒。

另一个不同之处是,在成功响应发送到客户端之后,对影响数据库的写操作是持久的。普罗米修斯缓冲区写入内存,默认情况下每5分钟刷新一次,这将打开一个潜在数据丢失的窗口。

我们希望,一旦发布了0.9.5的流量数据库,它将成为普罗米修斯用户作为长期指标存储(与普罗米修斯结合使用)的一个很好的选择。我非常肯定普罗米修斯已经提供了这种支持,但是在0.9.5版本发布之前,这种支持可能会有些不稳定。显然,我们必须一起工作,做一些测试,但这正是我所希望的。

对于单个服务器指标的摄取,我希望 Prometheus 具有更好的性能(尽管我们在这里没有做任何测试,也没有数字) ,因为它们的数据模型受到更多的约束,而且它们在写出索引之前不会向磁盘追加写操作。

两者之间的查询语言非常不同。我不知道他们支持什么,我们还不支持,或者反之亦然,所以你需要深入研究这两方面的文件,看看是否有你需要的东西可以做。更长远地看,我们的目标是让影响数据库的查询功能成为石墨、 RRD、普罗米修斯和其他时间序列解决方案的超集。我之所以说超集是因为我们想在以后,除了更多的解析函数之外,还要涉及这些函数。显然我们要花点时间才能到那里。

最后,影响力数据库的长期目标是通过集群支持高可用性和水平可伸缩性。当前的集群实现还没有完成特性,只处于 alpha 阶段。然而,我们正在努力,这是该项目的核心设计目标。我们的集群设计是数据最终是一致的。

据我所知,普罗米修斯的方法是对 HA 使用双写(因此没有最终一致性保证) ,并使用联合来实现水平可伸缩性。我不确定跨联邦服务器查询如何工作。

在影响数据库集群中,您可以跨服务器边界进行查询,而无需通过网络复制所有数据。这是因为每个查询都被分解成一种 MapReduce 作业,可以动态运行。

可能还有更多,但这是我现在能想到的。

我们从其他答案中得到了这两家公司的营销信息。现在让我们忽略它,回到时间数据序列的悲哀现实世界。

一些历史

流式数据库和普罗米修斯是用来取代旧时代的工具(RRDtool,石墨)。

是一个时间序列数据库。普罗米修斯(Prometheus)是一种度量收集和报警工具,其存储引擎就是为此而编写的。(我实际上不确定是否可以(或者应该)重用存储引擎来做其他事情)

限制

遗憾的是,编写数据库是一项非常复杂的工作。这两个工具成功实现某些功能的唯一途径是放弃所有与高可用性和集群相关的硬特性。

说白了,就是 它是一个单独的应用程序,只运行一个节点。

普罗米修斯没有支持任何集群和复制的目标。支持故障转移的正式方法是“ 运行两个节点并向它们发送数据”。哎哟。(请注意,这是唯一可能存在的方法,在官方文档中已经写了无数次了)。

流感数据库已经讨论集群很多年了... ... 直到今年3月它被正式放弃。对于 FluxDB 来说,集群已经不在考虑范围之内了.算了吧。当它完成时(假设它曾经完成过) ,它将只能在企业版中使用。

Https://influxdata.com/blog/update-on-influxdb-clustering-high-availability-and-monetization/

在接下来的几年里,我们希望能够拥有一个设计良好的时间序列数据库,它能够处理所有与数据库相关的难题: 复制、故障转移、数据安全、可伸缩性、备份... ..。

目前,还没有什么灵丹妙药。

该怎么办

评估预期的数据量

100度量 * 100个来源 * 1秒 = > 10000数据点/秒 = > 864兆数据点/天。

时间序列数据库的优点在于它们使用一种紧凑的格式,可以很好地压缩数据,聚合数据点,并且可以清除旧数据。(另外,它们还具有与时间数据序列相关的特性。)

假设一个数据点被视为4个字节,那么每天只有几个千兆字节。幸运的是,有10个核心和10个 TB 驱动器的系统随时可用。可以在单个节点上运行。

另一种方法是使用经典的 NoSQL 数据库(Cassandra、 ElasticSearch 或 Riak) ,然后在应用程序中设计缺失的位。这些数据库可能没有针对这种存储进行优化(或者它们有优化吗?现代数据库是如此复杂和优化,除非进行基准测试,否则无法确定)。

您应该评估应用程序 所需的容量。用这些不同的数据库和度量事物编写一个概念证明。

看看它是否在射流数据库的限制范围内。如果是这样,这可能是最好的选择。如果没有,你将不得不在其他东西的基础上制定自己的解决方案。

射影数据库根本无法容纳来自1000台服务器的生产负载(指标)。它在数据摄入方面存在一些实际问题,最终会被拖延/挂起,无法使用。我们曾试图使用它一段时间,但一旦数据量达到一定的临界水平,它就不能再使用了。没有内存或 CPU 升级帮助。 因此,我们的经验是肯定避免它,它是不成熟的产品,并有严重的建筑设计问题。我甚至不是在谈论流感突然转向商业。

接下来,我们研究了普罗米修斯,虽然它需要重写查询,但它现在可以毫无问题地获取4倍于我们尝试提供给流感的指标。所有的负载都由一台普罗米修斯服务器处理,快速、可靠、可靠。这是我们的经验,经营庞大的国际互联网商店在相当沉重的负荷。