Prometheus webpage之后,普罗米修斯和InfluxDB的一个主要区别是用法:虽然普罗米修斯存储时间序列,但只有InfluxDB更适合存储单个事件.由于在InfluxDB的存储引擎上已经做了一些主要的工作,我想知道这是否仍然是正确的.

我想设置一个时间序列数据库,除了PUSH/PUSH模型(可能还有性能上的差异),我看不出这两个项目有什么很大的区别.有人能解释一下用例的区别吗?

推荐答案

这里是InfluxDB首席执行官兼开发人员.下一版本的InfluxDB(0.9.5)将使用我们的新存储引擎.使用该引擎,我们将能够有效地存储单个事件数据或定期采样的系列.即不规则和规则的时间序列.

InfluxDB支持int64、float64、bool和string数据类型,每种数据类型使用不同的压缩方案.普罗米修斯只支持浮球.

对于压缩,0.9.5版本的压缩将与普罗米修斯竞争.在某些情况下,我们会看到更好的结果,因为我们会根据所看到的内容改变时间戳的压缩.最佳情况是以精确间隔采样的常规序列.在默认情况下,我们可以将1k点时间戳压缩为8字节的开始时间、增量(锯齿形编码)和计数(同样是锯齿形编码).

取决于我们看到的数据的形状<;压缩后平均每个点2.5字节.

YMMV基于您的时间戳、数据类型和数据形状.例如,带有纳秒时间戳和大可变增量的随机浮点将是最糟糕的.

时间戳的可变精度是XDB的另一个特性.它可以表示秒、毫秒、微秒或纳秒级的时间.普罗米修斯被固定为毫秒.

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

我们希望InfluxDB的0.9.5版本一旦发布,它将是普罗米修斯用户用作长期指标存储(与普罗米修斯联合使用)的一个很好的 Select .我非常肯定普罗米修斯已经提供了支持,但在0.9.5版本发布之前,它可能会有点困难.显然,我们必须一起工作,做一系列的测试,但这正是我所希望的.

对于单服务器指标接收,我预计Prometheus会有更好的性能(尽管我们在这里没有做任何测试,也没有数字),因为它们的数据模型更受约束,而且它们在写出索引之前不会将写入附加到磁盘.

两者之间的查询语言非常不同.我不确定他们支持什么,我们还不支持,或者签证也不支持,所以你需要在两者的文档中查看挖洞,看看是否有人可以做你需要的事情.从长远来看,我们的目标是让InfluxDB的查询功能成为Graphite、RRD、Prometheus和其他时间序列解决方案的超集.我之所以说超集,是因为我们想在后面讨论更多的解析函数.很明显,我们需要时间才能到达那里.

最后,InfluxDB的长期目标是通过集群支持高可用性和水平可伸缩性.当前的集群实现功能还不完整,只有Alpha版本.然而,我们正在努力,这也是该项目的核心设计目标.我们的集群设计是数据最终是一致的.

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

在InfluxDB集群中,您可以跨服务器边界进行查询,而无需通过网络复制所有数据.这是因 for each 查询都被分解成某种MapReduce作业(job),在飞翔上运行.

可能还有更多,但这就是我目前能想到的.

Database相关问答推荐

如何使用actors进行数据库访问和DDD?

什么是范围锁( range-locks)?

MySQL解释更新

数据验证是否应该在数据库级别进行?

如何在构建时创建填充的 MySQL Docker 映像

为什么数据库索引使用平衡树,而不是哈希表?

不同的数据库是否使用不同的名称引用?

MS Access 迁移的前端?

是否有任何数据库支持自动索引创建?

主键和主属性有什么区别?

在 SQL Server 2005 中将数据库从一个驱动器移动到另一个驱动器的正确方法是什么?

在默认路径下使用脚本创建数据库?

SQL Server 2008 中的 Open Table go 了哪里?

PostgreSQL 字符变长限制

EF4 代码优先导致 InvalidOperationException

Android 上的测试数据库:ProviderTestCase2 还是 RenamingDelegatingContext?

在 MYSQL 的子查询中使用 LIMIT 关键字的替代方法

为什么 DBMS 不支持 ASSERTION

在两列之间 Select 最近的日期

PostgreSQL 中的最大事务大小