首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InfluxDB性能

InfluxDB性能
EN

Stack Overflow用户
提问于 2015-04-25 06:07:05
回答 2查看 3.4K关注 0票数 5

对于我的情况,我需要捕获设备的15个性能指标,并将其保存到InfluxDB。每个设备具有唯一的设备id。

指标通过以下方式写入InfluxDB。这里我只展示一个示例

代码语言:javascript
复制
new Serie.Builder("perfmetric1")
    .columns("time", "value", "id", "type")
    .values(getTime(), getPerf1(), getId(), getType())
    .build()

写入数据既快又容易。但是当我运行query时,我发现性能很差。我正在尝试获取过去一小时内的所有15个度量值。

代码语言:javascript
复制
select value from perfmetric1, perfmetric2, ..., permetric15
where id='testdeviceid' and time > now() - 1h

在一个小时内,每个指标有120个数据点,总共是1800个数据点。当c4.4xlarge EC2实例空闲时,查询大约需要5秒。

我相信InfluxDB可以做得更好。这是我的模式设计的问题,还是其他问题?将查询拆分为15个并行调用会更快吗?

EN

回答 2

Stack Overflow用户

发布于 2015-05-11 15:47:35

正如@valentin answer所说,您需要为InfluxDB的id列构建一个索引,以便高效地执行这些查询。

在0.8稳定版中,你可以使用continuous fanout queries来做这个“索引”。例如,下面的连续查询将把您的perfmetric1系列扩展为多个perfmetric1.id形式的系列

代码语言:javascript
复制
select * from perfmetric1 into perfmetric1.[id];

稍后,您将执行以下操作:

代码语言:javascript
复制
select value from perfmetric1.testdeviceid, perfmetric2.testdeviceid, ..., permetric15.testdeviceid where time > now() - 1h

这个查询将花费更少的时间来完成,因为InfluxDB不需要执行完整的时间序列扫描来获得每个testdeviceid的点。

票数 4
EN

Stack Overflow用户

发布于 2015-04-25 06:11:05

在id列上建立索引。似乎引擎使用了对表的完全扫描来检索数据。如果将查询拆分成15个线程,引擎将使用15次完整扫描,性能将会差得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29858328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档