Influx DB写入性能太慢

时间:2016-09-27 22:54:57

标签: java influxdb

我正在使用java写入InfluxDB。

假设InfluxDB实例与数据库连接。以下是我的代码。

influxDB.enableBatch(500, 100, TimeUnit.MICROSECONDS);
   while (true) {
            try {
        Point point = Point.measurement("cpu").addField("idle", (Math.random()*1000)).build();
        influxDB.write(dbName, "default", point);
                } catch (RuntimeException e) {
            System.out.println(e.getMessage());
    }
    }

通过使用这种逻辑,我每秒只能写300条记录,这比我们预期的要少。每秒2000次写入就足够了。想知道我应该优化什么参数?

1 个答案:

答案 0 :(得分:1)

influxDB.enableBatch(500, 100, TimeUnit.MICROSECONDS);

表示每500点或至少每100毫秒冲洗一次。既然你说你每秒写300点我假设你只是在一秒内没有产生更多的积分来写入Influxdb。

我认为你的部分减速"您的积分创建为Math.random()。因此,尝试使用固定值并检查您是否在一秒内获得更多积分。

您正尝试执行的性能测试的一个很好的来源是Influxdb-java github。取自PerformanceTests.java,这个测试与您正在进行的测试非常相似:

@Test(threadPoolSize = 10, enabled = false)
public void writeSinglePointPerformance() throws InterruptedException {
    String dbName = "write_" + System.currentTimeMillis();
    this.influxDB.createDatabase(dbName);
    this.influxDB.enableBatch(2000, 100, TimeUnit.MILLISECONDS);
    String rp = TestUtils.defaultRetentionPolicy(this.influxDB.version());
    Stopwatch watch = Stopwatch.createStarted();
    for (int j = 0; j < SINGLE_POINT_COUNT; j++) {
        Point point = Point.measurement("cpu")
                .addField("idle", (double) j)
                .addField("user", 2.0 * j)
                .addField("system", 3.0 * j).build();
        this.influxDB.write(dbName, rp, point);
    }
    this.influxDB.disableBatch();
    System.out.println("Single Point Write for " + SINGLE_POINT_COUNT + " writes of  Points took:" + watch);
    this.influxDB.deleteDatabase(dbName);
}