influxdb:多次写入多点与单点

Posted

技术标签:

【中文标题】influxdb:多次写入多点与单点【英文标题】:influxdb: Write multiple points vs single point multiple times 【发布时间】:2017-05-01 21:40:45 【问题描述】:

我在我的项目中使用了 influxdb,当一次写入多个点时,我遇到了查询问题

我正在使用 influxdb-python 向 influxdb 写入 1000 个唯一点。

influxdb-python 中有一个函数叫influxclient.write_points()

我现在有两个选择:

    每次(1000 次)写入每个点或 合并1000个点,把所有点写一次。

第一个选项代码看起来像这样(仅限伪代码)并且有效:

thousand_points = [0...9999
while i < 1000:
    ...
    ...
    point = [thousand_points[i]]  # A point must be converted to dictionary object first
    influxclient.write_points(point, time_precision="ms")
    i += 1

写完所有点后,当我写这样的查询时:

SELECT * FROM "mydb"

我得到了所有的 1000 分。

为了避免每次迭代中每次写入所增加的开销,我想探索一次写入多个点。 write_points 函数支持。

write_points(points, time_precision=None, database=None, 保留策略=无,标签=无,批处理大小=无)

写入多个时间序列名称。

参数:points(字典列表,每个字典代表 a point) – 要写入数据库的点列表

所以,我所做的是:

thousand_points = [0...999]
points = []
while i < 1000:
    ...
    ...
    points.append(thousand_points[i])  # A point must be converted to dictionary object first
    i += 1

influxclient.write_points(points, time_precision="ms")

有了这个变化,当我查询时:

SELECT * FROM "mydb"

结果我只得到 1 分。我不明白为什么。

任何帮助将不胜感激。

【问题讨论】:

你能添加一个单点的例子吗?我怀疑您正在将所有内容都写入一个没有指定时间戳的系列。 或者可能是同一点 1000 次。 【参考方案1】:

我知道这一点在一年前就已经被问过了,但是,为了将多个数据点批量发布到 influxdb,每个数据点似乎都需要有一个唯一的时间戳,否则它将被不断地覆盖。

我会导入一个datetime 并将以下内容添加到for loop 中的每个数据点:

'time': datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")

所以每个数据点应该看起来像......

'fields': data, 'measurement': measurement, 'time': datetime....

希望这对遇到此问题的其他人有所帮助!

编辑:阅读文档显示另一个唯一标识符是标签,因此如果您希望指定时间,则可以改为包含 'tag' : i(假设每个迭代值都是唯一的)。 (不过这个我没试过)

【讨论】:

【参考方案2】:

SeriesHelper 可能有一个很好的案例

本质上,你提前设置了一个SeriesHelper类,每次发现要添加的数据点,你就打个电话。 SeriesHelper 将为您批量写入,每次写入最多 bulk_size

【讨论】:

如果标签和字段是预定义的,系列助手很棒,但如果我想创建一个系列点表怎么办?我需要动态的字段和标签。 我现在没有要测试的 influxdb 副本,所以我不确定。我曾经为不同的系列使用多个 SeriesHelper 子类。我不确定在单个系列中缺少/可选标签是否是一个好的计划。也许这是一个新问题的好话题?

以上是关于influxdb:多次写入多点与单点的主要内容,如果未能解决你的问题,请参考以下文章

03-Influxdb的备份与恢复

实战 InfluxDb + Grafana 数据监控

多点触摸与单点触摸接口主要区别

架构设计过程中,容易遇到的6个问题?

单点触摸屏与多点触摸屏的异同

python influxDB 基本操作