在 influxdb 中每个值使用一个标签

using one tag per value in influxdb

我正在阅读一些遗留代码,我发现 influxdb 中的所有插入都是以这种方式完成的(此处为简化代码):

influxDB.write(Point.measurement(myeasurement)
  .time( System.currentTimeMillis(), TimeUnit.MILLISECONDS)
  .addField("myfield", 123)
  .tag("rnd",String.valueOf(Math.random() * 100000)))
  .build())

你可以猜到,标签"rnd"的标签值每个值都不一样,也就是说我们可以有100k个不同的标签值。实际上,现在我们的值比那个少,所以我们最终应该每个值有一个不同的标签值...

我不是 influxdb 的专家,但我的理解是标签被 influxdb 用来将相关的值分组在一起,就像其他工具中的分区或分片一样。 100k 标签值好像很多...

真有我想的那么可怕吗?或者这种插入有没有可能对某些东西有用?

编辑:我刚刚意识到 Math.random()* 是双精度数,所以 * 100000 没用。作为 String.valueOf()。实际上,数据库中每个值都有一个系列,我无法想象那会是一件好事:(

这很糟糕而且没有必要。
不必要,因为您写入 influxdb 的每个点都由其时间戳 + 应用标签值集唯一标识。
不好,因为每组标签值都会创建一个单独的系列。 Influxdb 保留该系列的索引。为每个数据点设置唯一的标记值会增加您的系统资源需求并降低数据库速度。除非你没有那么多数据点,但你真的不需要时间序列数据库或者根本不在乎。

正如OP所说。标签用于分组或过滤。
这里有一些关于该主题的好读物
https://docs.influxdata.com/influxdb/v1.7/concepts/tsi-details/
https://www.influxdata.com/blog/path-1-billion-time-series-influxdb-high-cardinality-indexing-ready-testing/

根据文档,upper bound [for series or unique tag values] is usually somewhere between 1 - 4 million series depending on the machine used. 这很容易是一天的高分辨率数据。