有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

XDB批写入的java意外输出

我使用批处理写入XDB,下面是我的代码

    String dbName = "test";
    influxDB.query(new Query("CREATE DATABASE " + dbName, dbName));
    Stopwatch watch = Stopwatch.createStarted();
    influxDB.enableBatch(2000, 100, TimeUnit.MILLISECONDS);


        for (int j = 0; j < 100000; j++) {
            Point point = Point.measurement("cpu")
                    .addField("idle", (double) j)
                     .addField("system", 3.0 * j).build();
            influxDB.write(dbName, "autogen", point);
        }
       influxDB.disableBatch();
       System.out.println("Write for " + 100000 + " Points took:" + watch);
   }

在这里,我写了100000个点,这需要花费非常合理的时间来写,但是只有很少的记录被写入DB,而不是预期的100000个记录

select count(idle) from cpu只给了我“89”,我希望是“100000”

select * from cpu给了我以下信息:

cpu
time                        idle    system
2016-10-06T23:57:41.184Z    8       24
2016-10-06T23:57:41.185Z    196     588
2016-10-06T23:57:41.186Z    436     1308
2016-10-06T23:57:41.187Z    660     1980
2016-10-06T23:57:41.188Z    916     2748
2016-10-06T23:57:41.189Z    1278    3834
2016-10-06T23:57:41.19Z     1405    4215
2016-10-06T23:57:41.191Z    1409    4227
2016-10-06T23:57:41.192Z    1802    5406
2016-10-06T23:57:41.193Z    1999    5997
2016-10-06T23:57:41.456Z    3757    11271
2016-10-06T23:57:41.457Z    3999    11997
2016-10-06T23:57:41.858Z    4826    14478 and so on.....

这里我的问题是为什么idle的值丢失了,例如,在8之后应该是9、10、11,等等,但是这些值没有被持久化,直接出现在196之间,然后在436之间丢失。你知道在这种情况下如何保持循环变量“j”的所有值吗


共 (1) 个答案

  1. # 1 楼答案

    这条线

    influxDB.enableBatch(2000, 100, TimeUnit.MILLISECONDS);
    

    表示如果每100毫秒有超过2000个样本,它将刷新输入数据。由于您试图编写10万个样本,因此逻辑上大多数样本都会刷新

    相反,在单个批次中编写更少的样本。我的建议是在一个批次中写入5000个样本,并进行多个批次,直到所有数据都在数据库中

    // Batch 1
    influxDB.enableBatch(5000, 100, TimeUnit.MILLISECONDS);
    for (int j = 0; j < 5000; j++) {
       Point point = Point.measurement("cpu")
                          .addField("idle", (double) j)
                          .addField("system", 3.0 * j).build();
       influxDB.write(dbName, "autogen", point);
    }
    influxDB.disableBatch();
    
    // Batch 2
    // ...