Influxdb:多次写入多点与单点

时间:2016-12-16 06:30:35

标签: python influxdb influxdb-python

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

我使用Influxdb-python为Influxdb写入1000个唯一的点。

在Influxdb-python中有一个名为influxclient.write_points()

的函数

我现在有两个选择:

  1. 每次写一次(1000次)或
  2. 合并1000点并写下所有积分一次。
  3. 第一个选项代码如下所示(仅限伪代码),它可以工作:

    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,   retention_policy = None,tags = None,batch_size = None)

         

    写入多个时间序列名称。

         

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

    所以,我做的是:

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

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可能对SeriesHelper

有好的理由

实际上,您提前设置了SeriesHelper课程,每次发现要添加的数据点时,都会拨打电话。 SeriesHelper将为您批量写入,每次写入最多bulk_size个点

答案 1 :(得分:0)

我知道这个问题已经一年多了,但是,为了将多个数据点批量发布到influxdb,每个数据点似乎需要一个唯一的时间戳,否则它将被连续覆盖。

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

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

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

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

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

编辑:阅读文档后发现,另一个唯一的标识符是一个标记,因此,如果您希望指定时间,则可以添加{'tag' : i}(假设每个迭代值都是唯一的)。 (但是我没有尝试过)