InfluxDB 因海量数据而宕机
InfluxDB goes down for huge data
我正在使用 InfluxDB 构建仪表板。我有一个产生大约的来源。每分钟2000点。每个点有 5 个标签,6 个字段。只有一个测量值。
大约 24 小时内一切正常,但随着数据量的增加,我无法 运行 任何关于涌入的查询。例如,现在我有大约 48 小时的数据,甚至基本的 select 也会降低流入数据库,
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 默认配置
- OS Version:Ubuntu 14.04.2 LTS
- 配置:30GB 内存、4 个 VCPU、150GB 硬盘
一些背景:
我有一个仪表板和一个查询 influxdb 的网络应用程序。 Web 应用程序允许用户根据 tag1 或 tag2 查询数据库。
标签:
- tag1 - 每条记录都是唯一的。在 web 应用程序中的 where 子句中用于获取基于此字段的记录。
- tag2 - 每条记录都是唯一的。在 web 应用程序中的 where 子句中用于获取基于此字段的记录。
- tag3 - 在分组依据中使用。把它想象成 departmentid 绑定了一堆员工。
- tag4 - 在分组依据中使用。把它想象成 departmentid 绑定了一堆员工。
- tag5 - 在分组依据中使用。值 0 或 1 或 2。
粘贴来自 influxdb@googlegroups.com 邮件列表的答案:https://groups.google.com/d/msgid/influxdb/b4fb503e-18a5-4bd5-84b1-632dc4950747%40googlegroups.com?utm_medium=email&utm_source=footer
tag1 - unique for each record.
tag2 - unique for each record.
这是一个糟糕的架构。您正在为每条记录创建一个新系列,这给数据库带来了沉重的负担。每个系列都必须被索引,并且当前整个索引必须驻留在 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
我正在使用 InfluxDB 构建仪表板。我有一个产生大约的来源。每分钟2000点。每个点有 5 个标签,6 个字段。只有一个测量值。
大约 24 小时内一切正常,但随着数据量的增加,我无法 运行 任何关于涌入的查询。例如,现在我有大约 48 小时的数据,甚至基本的 select 也会降低流入数据库,
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 默认配置
- OS Version:Ubuntu 14.04.2 LTS
- 配置:30GB 内存、4 个 VCPU、150GB 硬盘
一些背景:
我有一个仪表板和一个查询 influxdb 的网络应用程序。 Web 应用程序允许用户根据 tag1 或 tag2 查询数据库。
标签:
- tag1 - 每条记录都是唯一的。在 web 应用程序中的 where 子句中用于获取基于此字段的记录。
- tag2 - 每条记录都是唯一的。在 web 应用程序中的 where 子句中用于获取基于此字段的记录。
- tag3 - 在分组依据中使用。把它想象成 departmentid 绑定了一堆员工。
- tag4 - 在分组依据中使用。把它想象成 departmentid 绑定了一堆员工。
- tag5 - 在分组依据中使用。值 0 或 1 或 2。
粘贴来自 influxdb@googlegroups.com 邮件列表的答案:https://groups.google.com/d/msgid/influxdb/b4fb503e-18a5-4bd5-84b1-632dc4950747%40googlegroups.com?utm_medium=email&utm_source=footer
tag1 - unique for each record.
tag2 - unique for each record.
这是一个糟糕的架构。您正在为每条记录创建一个新系列,这给数据库带来了沉重的负担。每个系列都必须被索引,并且当前整个索引必须驻留在 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