gpt4 book ai didi

java - Influxdb java客户端批处理不写入数据库

转载 作者:行者123 更新时间:2023-12-02 12:06:22 31 4
gpt4 key购买 nike

我正在尝试使用他们的 Java 客户端将点写入 influxDB。批处理对我来说很重要。

如果我将 influxDB.enableBatch 与 influxDB.write(Point) 一起使用,则不会插入数据。如果我使用 BatchPoints 和 influxDB.write(batchPoints) - 数据已成功插入。

两个代码示例均取自:https://github.com/influxdata/influxdb-java/tree/influxdb-java-2.7

    InfluxDB influxDB = InfluxDBFactory.connect(influxUrl, influxUser, influxPassword);
influxDB.setDatabase(dbName);
influxDB.setRetentionPolicy("autogen");

// Flush every 2000 Points, at least every 100ms
influxDB.enableBatch(2000, 100, TimeUnit.MILLISECONDS);
influxDB.write(Point.measurement("cpu")
.time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)
.addField("idle", 90L)
.addField("user", 9L)
.addField("system", 1L)
.build());

Query query = new Query("SELECT idle FROM cpu", dbName);
QueryResult result = influxDB.query(query);

不返回任何内容。

    BatchPoints batchPoints = BatchPoints.database(dbName).tag("async", "true").build();
Point point1 = Point
.measurement("cpu")
.tag("atag", "test")
.addField("idle", 90L)
.addField("usertime", 9L)
.addField("system", 1L)
.build();
batchPoints.point(point1);
influxDB.write(batchPoints);
Query query = new Query("SELECT * FROM cpu ", dbName);
QueryResult result = influxDB.query(query);

数据成功返回。

如前所述,我需要第一种方式来运行。我怎样才能实现这一目标?

版本:influxdb-1.3.6influxdb-java:2.7

问候,伊多

最佳答案

也许为时已晚,或者您已经解决了问题,但我会回答您的问题,这可能对其他人有用。

我认为您的第一个示例不起作用,因为您启用了批处理功能,并且它将“每 2000 点刷新一次,至少每 100 毫秒刷新一次”。所以基本上它是有效的,但是您在执行实际保存之前进行选择。当您使用 influxDB.enableBatch(...); 功能时,influxdb-client 会在收集数据后或超时后创建内部线程池来存储数据,并且不会立即完成。

在第二个示例中,当您使用 influxDB.write(batchPoints); 时,influxdb-client 会将您的数据同步写入 InfluxDb。这就是为什么您的 select 语句能够立即返回数据。

关于java - Influxdb java客户端批处理不写入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46885404/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com