4

プロジェクトで influxdb を使用していますが、一度に複数のポイントが書き込まれると、クエリの問題に直面しています。

influxdb-python を使用して、1000 個の一意のポイントを influxdb に書き込みます。

influxdb-python にはinfluxclient.write_points()という関数があります

現在、次の 2 つのオプションがあります。

  1. 各ポイントを毎回 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=なし、データベース=なし、retention_policy=なし、tags=なし、batch_size=なし)

複数の時系列名に書き込みます。

パラメータ: 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

これは1年以上前に尋ねられたことは知っていますが、複数のデータポイントをinfluxdbにまとめて公開するには、各データポイントに一意のタイムスタンプが必要なようです.そうしないと、継続的に上書きされます.

をインポートしてdatetime、 内の各データポイントに以下を追加します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 に答える