文档文档

优化 InfluxDB 写入性能

使用以下技巧来优化向 InfluxDB 写入数据时的性能和系统开销。

以下工具写入 InfluxDB,并且默认情况下采用大多数写入优化

批量写入

批量写入数据,以最大程度地减少向 InfluxDB 写入数据时的网络开销。

最佳批处理大小为 5000 行行协议。

按键对标签排序

在将数据点写入 InfluxDB 之前,按字典顺序按键对标签进行排序。验证排序结果是否与 Go bytes.Compare 函数的结果匹配。

# Line protocol example with unsorted tags
measurement,tagC=therefore,tagE=am,tagA=i,tagD=i,tagB=think fieldKey=fieldValue 1562020262

# Optimized line protocol example with tags sorted by key
measurement,tagA=i,tagB=think,tagC=therefore,tagD=i,tagE=am fieldKey=fieldValue 1562020262

尽可能使用最粗略的时间精度

默认情况下,InfluxDB 以纳秒精度写入数据。但是,如果您的数据不是以纳秒为单位收集的,则无需以该精度写入。为了获得更好的性能,请为时间戳使用尽可能粗略的精度。

写入 InfluxDB时指定时间戳精度。

使用 gzip 压缩

使用 gzip 压缩可加快 InfluxDB 的写入速度并减少网络带宽。基准测试表明,数据压缩后速度最多可提高 5 倍。

在 Telegraf 中启用 gzip 压缩

telegraf.conf 中的 influxdb_v2 输出插件配置中,将 content_encoding 选项设置为 gzip

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  # ...
  content_encoding = "gzip"

在 InfluxDB 客户端库中启用 gzip 压缩

每个InfluxDB 客户端库都提供了压缩写入请求的选项,或者默认强制压缩。每种库启用压缩的方法都不同。有关具体说明,请参阅InfluxDB 客户端库文档

将 gzip 压缩用于 InfluxDB API

当使用 InfluxDB API /api/v2/write 端点写入数据时,请使用 gzip 压缩数据,并将 Content-Encoding 标头设置为 gzip

echo "airSensors,sensor_id=TLM0201 temperature=73.97038159354763,humidity=35.23103248356096,co=0.48445310567793615 1630525358 
  airSensors,sensor_id=TLM0202 temperature=75.30007505999716,humidity=35.651929918691714,co=0.5141876544505826 1630525358" | gzip > air-sensors.gzip

curl --request POST \
"http://localhost:8086/api/v2/write?org=YOUR_ORG&bucket=YOUR_BUCKET&precision=ns" \
  --header "Authorization: Token YOUR_API_TOKEN" \
  --header "Content-Encoding: gzip" \
  --header "Content-Type: text/plain; charset=utf-8" \
  --header "Accept: application/json" \
  --data-binary @air-sensors.gzip

使用 NTP 同步主机

使用网络时间协议 (NTP) 同步主机之间的时间。如果行协议中未包含时间戳,则 InfluxDB 使用其主机的本地时间(UTC 时间)为每个点分配时间戳。如果主机的时钟未与 NTP 同步,则时间戳可能不准确。

在一个请求中写入多个数据点

要在一个请求中写入多行,则行协议的每一行都必须用换行符 (\n) 分隔。

速率限制

使用 influx write --rate-limit 标志来控制写入速率。使用以下字符串格式之一来指定速率限制

  • COUNT(B|kB|MB),或
  • COUNT(B|kB|MB)/TIME(s|sec|m|min)

其中 COUNT 是十进制数字,TIME 是正整数。值中的空格将被忽略。例如:“5MB / 5min”也可以表示为 17476.266666667Bs1MB/1min1MB/min1MBmin1MBm。如果速率限制格式无效,则 influx write 会打印出该格式和一个精确的正则表达式。 --rate-limit 标志也可以与 influx write dryrun 一起使用。

默认情况下,InfluxDB Cloud 中的免费层级速率限制为 1MB/min


此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像当前一样使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已发布 Public Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两款产品作为 Alpha 版本的一部分。

InfluxDB 3 Core 是我们新的开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何入门的更多信息,请查看