Java XDB批写入的意外输出

Java XDB批写入的意外输出,java,influxdb,Java,Influxdb,我使用批处理写入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;

我使用批处理写入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);
   }
这里我的问题是为什么idle的值丢失了,例如,在8之后应该是9、10、11,等等,但是这些值没有被持久化,直接出现在196之间,然后在436之间丢失。知道如何在这种情况下保持循环变量“j”的所有值吗?

这行

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
// ...
//第1批
influxDB.enableBatch(5000100,时间单位毫秒);
对于(int j=0;j<5000;j++){
点=点测量(“cpu”)
.addField(“空闲”,(双)j)
.addField(“系统”,3.0*j).build();
influxDB.write(dbName,“autogen”,point);
}
influxDB.disableBatch();
//第2批
// ...
这一行

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
// ...
//第1批
influxDB.enableBatch(5000100,时间单位毫秒);
对于(int j=0;j<5000;j++){
点=点测量(“cpu”)
.addField(“空闲”,(双)j)
.addField(“系统”,3.0*j).build();
influxDB.write(dbName,“autogen”,point);
}
influxDB.disableBatch();
//第2批
// ...

对于您在上面粘贴的代码,即使我在批数据中写入了一些样本,但没有完全写入数据库,我只能看到很少的点被写入,不知道如何才能写入第一批的所有5000条记录/点。有些批的值为Point[name=cpu,time=1475881348762,tags={blubber=bla},精度=毫秒,字段={idle=0.0}],点[名称=cpu,时间=1475881348762,标记={blubber=bla},精度=毫秒,字段={idle=1.0}],点[名称=cpu,时间=1475881348762,标记={blubber=bla},精度=毫秒,字段={idle=2.0}],点[名称=cpu,时间=1475881348762,标记={blubber=bla},精度=毫秒,字段={idle=3.0}],但我可以看到每个点都有相同的时间值,这导致它在DB中只写入一次。想知道如何使用批写入而不使用“点的过度写入”吗?对于上面粘贴的代码,即使我在批数据中写入了几个示例,但没有完全写入DB,我只能看到写入的点很少,不确定如何写入第一批的所有5000条记录/点。有些批具有点值[name=cpu,time=1475881348762,tags={blubber=bla},precision=ms,fields={idle=0.0}],Point[name=cpu,time=1475881348762,tags={blubber=bla},precision=ms,fields={idle=1.0}],Point[name=cpu,time=1475881348762,tags={blubber=bla},precision=ms,fields={idle=2.0}],Point[name=cpu,time=147348762,tags]={blubber=bla},precision=ms,fields={idle=3.0}],但我可以看到每个点都有相同的时间值,这导致它在DB中只写一次。我想知道如何使用批写而不“过写”点?