InfluxDB因大量数据而失败

时间:2016-03-07 19:44:37

标签: influxdb

我正在使用InfluxDB构建一个仪表板。我有一个生成大约的源。每分钟2000点。每个点有5个标签,6个字段。只有一个测量。

大约24小时一切正常但随着数据量的增长,我无法对涌入进行任何查询。例如,现在我有大约48小时的数据,甚至基本选择都会降低涌入数据库,

select count(field1) from measurementname

它超时错误:

ERR: Get http://localhost:8086/query?db=dbname&q=select+count%28field1%29+from+measuementname: EOF


配置:

  • InfluxDB版本:0.10.1默认配置
  • 操作系统版本:Ubuntu 14.04.2 LTS
  • 配置:30GB RAM,4个VCPU,150GB HDD

一些背景:

我有一个仪表板和一个查询Influxdb的网络应用程序。 webapp允许用户根据tag1或tag2查询数据库。

标签:

  • tag1 - 每条记录都是唯一的。在Web应用程序的where子句中使用,以根据此字段获取记录。
  • tag2 - 每条记录都是唯一的。在Web应用程序的where子句中使用,以根据此字段获取记录。
  • tag3 - 在group by中使用。把它想象成与一群员工捆绑在一起。
  • tag4 - 在group by中使用。把它想象成与一群员工捆绑在一起。
  • tag5 - 在group by中使用。值0或1或2.

1 个答案:

答案 0 :(得分:4)

从Influxdb@googlegroups.com邮件列表中粘贴答案:https://groups.google.com/d/msgid/influxdb/b4fb503e-18a5-4bd5-84b1-632dc4950747%40googlegroups.com?utm_medium=email&utm_source=footer

  

tag1 - 每条记录都是唯一的   tag2 - 每条记录都是唯一的。

这是一个糟糕的架构。您正在为每条记录创建一个新系列,这会给数据库带来负担。必须索引每个系列,并且整个索引当前必须驻留在RAM中。我怀疑你因为系列基数而在48小时后内存不足,而查询只是最后一根,而不是低内存情况的实际原因。

在标签中使用唯一值是非常糟糕的做法。你仍然可以在WHERE子句中使用字段,它们只是不具备性能,并且对系统的损害远远小于为每个点设置一个独特的系列。

https://docs.influxdata.com/influxdb/v0.10/concepts/schema_and_data_layout/ https://docs.influxdata.com/influxdb/v0.10/guides/hardware_sizing/#when-do-i-need-more-ram