4

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

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

在 influxdb-python 中有一个名为influxclient.write_points()的函数

我现在有两个选择:

  1. 每次写入每个点一次(1000 次)或
  2. 巩固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(点,time_precision=None,数据库=None,retention_policy=None,tags=None,batch_size=None)

写入多个时间序列名称。

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

所以,我所做的是:

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分。我不明白为什么。

任何帮助都感激不尽。

4

2 回答 2

3

你可能有一个很好的案例SeriesHelper

从本质上讲,您提前设置了一个SeriesHelper类,每次发现要添加的数据点时,您都​​会拨打电话。SeriesHelper将为您批量写入,每次bulk_size写入最多积分

于 2016-12-16T09:29:27.480 回答
2

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

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

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

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

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

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

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

于 2019-03-14T11:41:08.140 回答